首先,自我介绍一下,我是一个刚刚开始训练的小菜鸡。。。。。
下面开始正题吧。
今天晚上做了两道Atcoder Beginner 的两道题,其中第二道题,让我感到吐血,下面附图:
//Atcoder 的规定时间是2000ms,而这个程序跑了2103ms.....我要吐血!!!!
#include<stdio.h>
void select(int num[9])
{
int i=0,j=0,len=0;
int c[5][3],list1[9]={0};
while(i<9)
{
if(num[i]!=0)
{
len++;
list1[j++]=num[i];
}
}
if(len<3)
printf("No\n");
else if(len>5)
printf("Yes\n");
if
else
{
for(i=0;i<len;i++)
{
c[i][0]=list1[i]/3;
c[i][1]=list1[i]%3;
c[i][2]=list1[i]%4;
}
for(i=0;i<3;i++)
{
int temp=0;
temp=c[i][0];
for(j=1;j<len;j++)
{
if(temp!=c[i][j])
break;
}
if(j==len)
{
printf("Yes\n");
break;
}
}
if(i==3)
printf("No\n");
}
}
int main()
{
int a[3][3];
int n,i,j,list[9],num[9]={0};
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
list[3*i+j-1]=a[i][j];
}
}
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
j=0;
while(j<9)
{
if(num[i]!=list[j])
j++;
else
{
num[i]=j+1;
break;
}
}
if(j==9)
num[i]=0;
}
select(num);
return 0;
}
//下面附上此题正确解法以及比较分析,下面的解法是在Atcoder上找的。
//在初期我们俩的方法相同,而在后期,我将信息列成一维,而下面这位同学则列为二维,并通过循环来摆脱大部分情况的单列,所以时间较少
//下回要好好考虑用什么结构的数据!!!
/*
#include<iostream>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
int a[4][4],v[4][4];
int b[105];
int n;
int main()
{
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
cin>>a[i][j];
}
}
cin>>n;
for(int i=0;i<n;i++)
{
cin>>b[i];
}
memset(v,0,sizeof(v));
for(int i=0;i<n;i++)
{
int flag=0;
for(int j=1;j<=3;j++)
{
for(int k=1;k<=3;k++)
{
if(a[j][k]==b[i])
{
v[j][k]=1;
flag=1;
break;
}
}
if(flag==1) break;
}
}
int flag=0;
for(int i=1;i<=3;i++)
{
if(v[i][1]==1&&v[i][2]==1&&v[i][3]==1||v[1][i]==1&&v[2][i]==1&&v[3][i]==1)
{
flag=1;
}
}
if(v[1][1]==1&&v[2][2]==1&&v[3][3]==1||v[1][3]==1&&v[2][2]==1&&v[3][1]==1)
flag=1;
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
*/
好了,希望以后自己可以慢慢变强吧,毕竟算法还是挺重要的。
小菜鸡变身-》》》》菜鸡中的战斗机!!!