Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1562131
  • 博文数量: 327
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 3556
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-05 21:28
个人简介

东黑布衣,流浪幽燕。 真诚善良,值得信赖。

文章分类

全部博文(327)

我的朋友

分类: BSD

2016-11-16 14:27:07



  1. #include <stdio.h>
  2. int N;
  3. int a[30];
  4. int score;
  5. int result;

  6. void change_state(int p)
  7. {
  8.    int i;
  9.    int j;
  10.    i=p;
  11.    if(i-1>=0 && a[i-1]!=0 && a[i-1]!=a[i])
  12.    {
  13.       i=p-1;
  14.       while(i>=0){
  15.          if(a[i]==a[i-1]){
  16.             i--;
  17.             continue;
  18.          }else
  19.             break;
  20.       }
  21.    }
  22.    if(i-1<0 || (i-1>=0 && a[i-1]==a[p])){
  23.       for(j=i;j<p;j++)
  24.          a[j]=a[p];
  25.    }
  26.    i=p;
  27.    if(i+1<=N-1 && a[i+1]!=0 && a[i+1]!=a[i])
  28.    {
  29.       i=p+1;
  30.       while(i<=N-1){
  31.          if(a[i+1]==a[i]){
  32.             i+=1;
  33.             continue;
  34.          }else
  35.             break;
  36.       }
  37.    }
  38.    if(i+1>N-1 || ((i+1<=N-1) && a[i+1]==a[p])){
  39.       for(j=p+1;j<=i;j++)
  40.          a[j]=a[p];
  41.    }
  42.    return;
  43. }
  44. void put_piece(int round)
  45. {
  46.    int i,j,m;
  47.    int b[30]={0};
  48.    if(round==4){
  49.       score=0;
  50.       for(i=0;i<N;i++){
  51.          if(a[i]==1)
  52.             score+=1;
  53.       }
  54.       if(result<score)
  55.          result=score;
  56.       return;
  57.    }
  58.    for(i=0;i<N;i++)
  59.    {
  60.       if(a[i]==0){
  61.          //save status
  62.          for(m=0;m<N;m++)
  63.             b[m]=a[m];
  64.          a[i]=1;
  65.          change_state(i);
  66.          for(j=0;j<N;j++){
  67.             if(a[j]==0){
  68.                a[j]=2;
  69.                change_state(j);
  70.                break;
  71.             }
  72.          }
  73.          put_piece(round+1);
  74.          //restore
  75.          for(m=0;m<N;m++)
  76.             a[m]=b[m];
  77.       }
  78.    }
  79. }

  80. int _tmain(int argc, _TCHAR* argv[])
  81. {
  82.    int i;
  83.    int T;
  84.    int testcase;
  85.    freopen("20161116i.txt","r",stdin);
  86.    scanf("%d",&T);
  87.    for(testcase=1;testcase<=T;testcase++){
  88.       result=0;
  89.       scanf("%d", &N);
  90.       for(i=0;i<N;i++){
  91.          scanf("%d ", &a[i]);
  92.       }
  93.       put_piece(1);
  94.       printf("#%d %d\n",testcase,result);
  95.    }
  96.     return 0;
  97. }

  98. /* in
  99. 3
  100. 15
  101. 0 2 2 0 1 2 2 1 0 0 0 0 2 0 2
  102. 6
  103. 0 0 0 0 0 0
  104. 10
  105. 0 2 0 0 1 0 0 0 0 0
  106. */

  107. /* out
  108. #1 9
  109. #2 0
  110. #3 4
  111. */


阅读(1485) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~