谷歌2015RoundA第一题

<p>#include<iostream>
#include<map>
#include<string>
#include<vector>
using namespace std;
string mb[10];//模板
int next[10]={9,0,1,2,3,4,5,6,7,8};//记录当前数字的下一个数字
/*返回某个字符串与k模板是否匹配*/
bool danm(string a,int z[],int k)//k是开始,m最多几次
{
  for(int j=0;j<7;j++)
  {
      if((a[j]=='0'&&mb[k][j]=='1'&&z[j]==1)||(a[j]=='1'&&mb[k][j]=='0'))
   {
       return false;
   } 
  }
   return true;
}
int main()
{</p><p>mb[0]="1111110";
mb[1]="0110000";
mb[2]="1101101";
mb[3]="1111001";
mb[4]="0110011";
mb[5]="1011011";
mb[6]="1011111";
mb[7]="1110000";
mb[8]="1111111";
mb[9]="1111011";
 freopen("D:\\A-small-practice.in","r",stdin);
 freopen("D:\\A-small-practice.out","w",stdout);
 /******************************************/
 int T;
 cin>>T;
 int id=1;
 while(T--)
 {
  int kh[7];//记录可能坏的板子其中1表示不能坏,0表示可以坏
  memset(kh,0,sizeof(kh));
  int n,i,j;
  cin>>n;
  vector<string> s;
  while(n--)
  {
   string temp;
   cin>>temp;
   s.push_back(temp);
  }
  for(i=0;i<s.size();i++)
  {
   for(j=0;j<7;j++)
   {
    if(s[i][j]=='1')//如果板子可坏则为'0'
     kh[j]=1;
   }
  }
//  for(i=0;i<7;i++)
//   cout<<kh[i]<<" ";
//  cout<<endl;
  int ks=-1;
  vector<int> shou;//记录第一个字符串可能与那几个数相匹配
  for(i=0;i<10;i++)
   if(danm(s[0],kh,i))//如果匹配则加入
    shou.push_back(i);
  int d=0;
  if(shou.size()>0)//如果有匹配的则初始化ks
  {
   ks=shou[d];
      i=1;
  }
  /*
  第一个字符串如果和某个数字匹配,则看下一个是否和下一个数匹配,如果匹配则继续往下走直到走完所有的字符串
  如果不匹配则跳到第一个字符串,选择第一个字符串的另一个可能继续走如果还不行,第一个没有可能了,则error
  */
  while(ks!=-1&&i<s.size())//
  {
   if(danm(s[i],kh,next[ks]))//如果下一个是当前数的后一个
   {
    ks=next[ks];
    i++;
   }
   else//如果不是则找s[0]的下一个可能 
   {
    d++;
    if(d<shou.size())
    {
     ks=shou[d];
     i=1;
    }
    else ks=-1;
   }
  }
  cout<<"Case #"<<id<<": ";
  if(ks!=-1)
  {
   int r[7]={0,0,0,0,0,0,0};
   for(i=0;i<7;i++)
   {
    if(kh[i]==1&&mb[next[ks]][i]=='1')
     r[i]=1;
   }
   cout<<next[ks]<<":";
   for(i=0;i<7;i++)
   cout<<r[i];
   cout<<endl;
  }
  else cout<<"ERROR!"<<endl;
 // int fan=danm(s[0],kh,0);
 // cout<<fan<<endl;</p><p>     id++;
 }
 fclose(stdin);
 fclose(stdout);
 return 1;
}</p>
这样没过,因为我怀疑他的问题有问题,我先把我的思路写一下,

出错的电子板只能是不为1的位置。

 第一个字符串如果和某个数字匹配,则看下一个是否和下一个数匹配,如果匹配则继续往下走直到走完所有的字符串
  如果不匹配则跳到第一个字符串,选择第一个字符串的另一个可能继续走如果还不行,第一个没有可能了,则error

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值