谷歌代码堵塞APAC测试七段显示

时间:2014-08-18 19:32:03

标签: c++

我正在尝试解决 Google Code Jam APAC测试七段显示问题。 的 https://code.google.com/codejam/contest/3214486/dashboard 我已经使用包含二进制数98765432109876的字符串和给定字符串N之间的最小汉明距离来实现该解决方案。 当结果打印 ERROR!时,我无法理解案例。 这是我的解决方案 -

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
    int t;
    cin>>t;
     char str[]="111101111111111110000101111110110110110011111100111011010110000111111011110111111111111000010111111011011";
     int l=strlen(str);

    for(int k=1;k<=t;k++)
    {
     int n;
      cin>>n;
       l=10*7+(n-1)*7;
      char num[50];
      for(int i=0;i<7*n;i++)
      {
            char ch;
            cin>>ch;
            if(ch!=' ')
             num[i]=ch;

      }
      int ok[7]={0};
      for(int i=0;i<7*n;i++)
      {
          ok[i%7]=ok[i%7]|(num[i]-'0');
      }

      int mn_dst=10000,dt=0,f=0,pos=0;
      int xor_res[9]={0},txor_res[9]={0},z=0;

      for(int i=0;i<=(l-(7*n));i=i+7)
      {
          dt=0;
          z=0;
          memset(txor_res,0,sizeof(int)*9);

        for(int j=0;j<7*n;j++){
            if((str[j+i]=='1'&&num[j]=='0'&&ok[j%7]==1)||(str[j+i]=='0'&&num[j]=='1'))
            {z=1;
             break;
            }
          if(str[j+i]!=num[j])
            {dt++;
             txor_res[j%7]=1;
            }

                              }
            if(z==1)
              continue;

             if(dt==mn_dst)
                {f=1;
                  break;
                }
             if(mn_dst!=10000)
             {f=1;
              break;
             }
             if(dt<mn_dst)
             {
                 mn_dst=dt;
                 dt=0;
                 pos=i;
                 for(int h=0;h<=7;h++)
                 {
                   xor_res[h]=txor_res[h];
                   txor_res[h]=0;
                 }

             }

      }

        if(f==1||mn_dst==10000)
         cout<<"Case #"<<k<<": "<<"ERROR!\n";
        else
         {
             cout<<"Case #"<<k<<": ";

             pos=pos+7*n;
             for(int i=pos;i<(pos+7);i++)
                {

                      cout<<str[i];
                }
         cout<<"\n";
         }

    }
}

我不想通过理解我的代码来打扰任何人。相反,我想要一种新方法。

1 个答案:

答案 0 :(得分:0)

我在理解你的问题时遇到了同样的问题。我下载了A-small-practice.in。我运行了一个正确的解决方案,我们在以下情况下生成不同的输出 -

案例1

输入

1 0001011

我的输出 -

Case #18: 0100011

正确输出 -

Case #18: ERROR!

案例2

输入

1 0011111

我的输出 -

Case #27: 0011011

正确输出 -

Case #27: ERROR!

案例3

输入

1 1001111

我的输出 -

Case #66: 1001011

正确输出 -

Case #66: ERROR!

案例4

输入

1 1111110

我的输出 -

Case #73: 1111011

正确输出 -

Case #73: ERROR!

案例5

输入

1 1011101

我的输出 -

Case #74: 1011001

正确输出 -

Case #74: ERROR!
<案例6

输入

2 1001001 1001101

我的输出 -

Case #77: 0000000

正确输出 -

Case #77: ERROR!
<案例7

输入

1 0111011

我的输出 -

Case #81: 0111111

正确输出 -

Case #81: ERROR!

案例8

输入

1 1011011

我的输出 -

Case #94: 0110011

正确输出 -

Case #94: ERROR!

我的输出不匹配的所有情况,这是因为正确的输出是&#34; ERROR!&#34;,而我能够找到明确的下一状态。您或其他人可以指出为什么我的解决方案不是唯一明确的状态吗? :)任何其他指针也将受到赞赏。

让我们一起一个案例找出这个问题的确切含义:D