一般路人向第40次CCF-CSP认证(275/500)
官方解析:https://dl.ccf.org.cn/video/videoDetail.html?id=7808351746705408
考试前一天:怎么这次还是一般路人向?从CSP39以来一直有一个练算法的冲动,,,仅仅是冲动。直到考试前一天我去来不及了。凉拌吧。练了练大模拟,全都不会做hhh,上考场了。
考试当天:ohno起晚了,去印资料、吃个饭,到考点只剩十分钟不到了。进考场之后发现自己考位的电脑居然没有电脑鼠标,老师也找不到,寄。过了会儿老师拿了俩键盘鼠标回来给其他同学了,原来别人还有相同状况的。接着我再跟老师说,老师再去给找,拿来赶紧插上开机,正好 13:30 ,比赛开始,立马断网,没法配 vs 或者 vscode 的环境,只好拿起来快两年没碰的 dev c++ 了。最后十分钟在做 T4 前 30% 点的枚举,可惜这台神奇的机器上 dev c++ 编译运行一次几乎需要十秒钟,最终遗憾离场。
长记性了吧。早点去比什么都好。
仅代码,题解待更新。
T1 (100)
#include<stdio.h>
int xorcmp(int*a, int*b, int*set)
{
int x=set[a[1]];
int y=set[b[1]];
for(int i=2;i<=a[0];i++)
{
x=x^set[a[i]];
}
for(int i=2;i<=b[0];i++)
{
y=y^set[b[i]];
}
if(x==y)
{
return 1;
}
else
{
return 0;
}
}
int realcmp(int* a, int* b, int*set)
{
if(set[a[0]]!=set[b[0]])
{
return 0;
}
else
{
for(int i=1;i<=a[0];i++)
{
if(set[a[i]]!=set[b[i]])
{
return 0;
}
}
return 1;
}
}
int m,n;
int a[10005];
int s[105][10005];
int t[105][10005];
int main()
{
scanf("%d %d",&n, &m);
for(int i=1;i<=n;i++)
{
scanf("%d", &a[i]);
}
for(int i=1;i<=m;i++)
{
scanf("%d", &s[i][0]);
for(int j=1; j<=s[i][0]; j++)
{
scanf("%d", &s[i][j]);
}
}
for(int i=1;i<=m;i++)
{
scanf("%d", &t[i][0]);
for(int j=1; j<=t[i][0]; j++)
{
scanf("%d", &t[i][j]);
}
}
for(int i=1;i<=m;i++)
{
if(realcmp(s[i],t[i],a)==xorcmp(s[i],t[i],a))
{
printf("correct\n");
}
else
{
printf("wrong\n");
}
}
return 0;
}
T2 (100)
#include<stdio.h>
void toeight(int n, int *n1, int*n2,int*n3)
{
*n3=n%8;
n=n/8;
*n2=n%8;
n=n/8;
*n1=n%8;
}
int f(int n, int k)
{
return ((n*n+k*k)%8)^k;
}
int m,n;
int k[1005];
int qst[500005];
int res[520];
int a,b,c;
int a0,b0,c0;
int main()
{
scanf("%d %d", &n, &m);
for(int i=1;i<=m;i++)
{
scanf("%d", &k[i]);
}
for(int i=1;i<=n;i++)
{
scanf("%d", &qst[i]);
}
for(int i=0;i<512;i++)
{
toeight(i,&a,&b,&c);
for(int j=1;j<=m;j++)
{
a0=a;
b0=b;
c0=c;
a=b;
b=c0^f(b0,k[j]);
c=a0^f(c0,k[j]);
}
res[i]=a*64+b*8+c;
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<512;j++)
{
if(res[j]==qst[i])
{
printf("%d ",j);
}
}
}
return 0;
}
T3 (75)
效率不高,有 25% 的大样例 TLE。
#include<stdio.h>
int z,knum;
int n,m;
char a[405][405];
int t,op,u,v,l,d,r,o;
char aold[405][405];
int k[50005][6];
void shun(char a[][405],char aold[][405],int z,int u,int v, int l)
{
for(int i=u;i<u+l;i++)
{
for(int j=v;j<v+l;j++)
{
aold[i][j]=a[i][j];
}
}
for(int i=u;i<u+l;i++)
{
for(int j=v;j<v+l;j++)
{
a[j-v+u][u+v+l-1-i]=aold[i][j];
}
}
}
void ni(char a[][405],char aold[][405],int z,int u,int v, int l)
{
for(int i=u;i<u+l;i++)
{
for(int j=v;j<v+l;j++)
{
aold[i][j]=a[i][j];
}
}
for(int i=u;i<u+l;i++)
{
for(int j=v;j<v+l;j++)
{
a[v+u+l-1-j][i-u+v]=aold[i][j];
}
}
}
void decode1(char a[][405],char aold[][405],int z,int u,int v,int l,int d,int r)
{
for(int i=1;i<=r;i++)
{
shun(a,aold,z,1,1,z);
}
for(int i=1;i<=d/90;i++)
{
ni(a,aold,z,u,v,l);
}
}
void decode2(char a[][405],char aold[][405],int z,int u,int d, int l, int r, int o)
{
if(o==1)
{
for(int i=u;i<=d;i++)
{
for(int j=l;j<=r;j++)
{
aold[i][j]=a[i][j];
}
}
for(int i=u;i<=d;i++)
{
for(int j=l;j<=r;j++)
{
a[u+d-i][j]=aold[i][j];
}
}
}
else
{
for(int i=u;i<=d;i++)
{
for(int j=l;j<=r;j++)
{
aold[i][j]=a[i][j];
}
}
for(int i=u;i<=d;i++)
{
for(int j=l;j<=r;j++)
{
a[i][l+r-j]=aold[i][j];
}
}
}
}
int main()
{
scanf("%d",&z);
for(int i=1;i<=z;i++)
{
scanf("%s",&a[i][1]);
}
scanf("%d",&knum);
scanf("%d",&t);
for(int j=1;j<=t;j++)
{
scanf("%d %d %d %d %d %d",&k[j][0],&k[j][1],&k[j][2],&k[j][3],&k[j][4],&k[j][5]);
}
for(int j=t;j>=1;j--)
{
if(k[j][0]==1)
{
decode1(a,aold,z,k[j][1],k[j][2],k[j][3],k[j][4],k[j][5]);
}
else
{
decode2(a,aold,z,k[j][1],k[j][2],k[j][3],k[j][4],k[j][5]);
}
}
for(int i=z;i>=1;i--)
{
if(a[i][1]!='?')
{
n=i;
break;
}
}
for(int i=z;i>=1;i--)
{
if(a[1][i]!='?')
{
m=i;
break;
}
}
for(int i=1;i<=z;i++)
{
a[i][m+1]='\0';
}
printf("%d %d\n",n,m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
printf("%c",a[i][j]);
}
printf("\n");
}
return 0;
}
浙公网安备 33010602011771号