topcoder 849-SRM 562 DIV1

花了一分钟构思出按照这种操作是符合等比数列的,结果到最后都没有调试出来,对这个界面不熟悉是一个很大的原因。(当时由于笔记本上没有编译器,下了个c-free结果现在都还在用。。囧)。前面400暴力模拟,当T>400时按等比数列构造。

View Code
 class PastingPaintingDivOne {
     public:
       vector<int64> countColors(vector <string> c, int t) {
                 int64 i,j,k,maze[MM][MM],n,m;
                 int64 a[1010][1010];
                 n=c.size(), m=c[0].size();
                 memset(maze,0,sizeof(maze));
                 for(i=0;i<n;i++){
                     for(j=0;j<m;j++) {
                         if(c[i][j]=='R') maze[i][j]=1;
                         else if(c[i][j]=='G') maze[i][j]=2;
                         else if(c[i][j]=='B')maze[i][j]=3;
                     }
                 }
                 int64 count[4],limit=400,p[4];
                 memset(a,0,sizeof(a));
                 memset(count,0,sizeof(count));
                 for(i=1;i<=t && i<=limit;i++) {
                     p[1]=count[1], p[2]=count[2], p[3]=count[3];
                     for(j=i;j<i+n;j++) {
                         for(k=i;k<i+m;k++) {
                             if(maze[j-i][k-i]) {
                                 if(a[j][k]) count[a[j][k]]--;
                                 a[j][k]=maze[j-i][k-i];
                                 count[a[j][k]]++;
                             }
                         }
                     }
                 }
                 if(i>limit) {
                       count[1]+=(t-limit)*(count[1]-p[1]);
                       count[2]+=(t-limit)*(count[2]-p[2]);
                       count[3]+=(t-limit)*(count[3]-p[3]);
                 }
                 VI res;
                 res.push_back(count[1]);
                 res.push_back(count[2]);
                 res.push_back(count[3]);
                 return res;
       }
 };
posted @ 2012-12-01 23:33  zhang1107  阅读(218)  评论(0编辑  收藏  举报