大家都知道,IOI是一个全球性编程大赛,难度高到无法形容。但在那个信息学竞赛刚开始的年代,题目的难度是怎样的?
听了我的介绍,大家首先想到的肯定是数字三角形这道题,但其实并不是,而是今天要向大家水题讲解的时钟(不要看它是道绿题)。
一位大佬的发言
首先:交换两次操作,结果不变(搞不懂的建议去试一下)。
第二:每种操作不超过三次,因为如果操作了四次,就相当于不进行该操作。
接下来就可以水题枚举了。
新建一个桶数组,用于存放每种操作的个数,然后用九重循环枚举。
for(ans[1]=0;ans[1]<=3;ans[1]++)
for(ans[2]=0;ans[2]<=3;ans[2]++)
for(ans[3]=0;ans[3]<=3;ans[3]++)
for(ans[4]=0;ans[4]<=3;ans[4]++)
for(ans[5]=0;ans[5]<=3;ans[5]++)
for(ans[6]=0;ans[6]<=3;ans[6]++)
for(ans[7]=0;ans[7]<=3;ans[7]++)
for(ans[8]=0;ans[8]<=3;ans[8]++)
for(ans[9]=0;ans[9]<=3;ans[9]++)
真是壮观啊
再用九个if判断是否满足条件。
只需判断与该时钟相关的几个操作就行了。
for(ans[1]=0;ans[1]<=3;ans[1]++)
for(ans[2]=0;ans[2]<=3;ans[2]++)
for(ans[3]=0;ans[3]<=3;ans[3]++)
for(ans[4]=0;ans[4]<=3;ans[4]++)
for(ans[5]=0;ans[5]<=3;ans[5]++)
for(ans[6]=0;ans[6]<=3;ans[6]++)
for(ans[7]=0;ans[7]<=3;ans[7]++)
for(ans[8]=0;ans[8]<=3;ans[8]++)
for(ans[9]=0;ans[9]<=3;ans[9]++)
if((ans[1]+ans[2]+ans[4])%4==4-clo[1])
if((ans[1]+ans[2]+ans[3]+ans[5])%4==4-clo[2])
if((ans[2]+ans[3]+ans[6])%4==4-clo[3])
if((ans[1]+ans[4]+ans[5]+ans[7])%4==4-clo[4])
if((ans[1]+ans[3]+ans[5]+ans[7]+ans[9])%4==4-clo[5])
if((ans[3]+ans[5]+ans[6]+ans[9])%4==4-clo[6])
if((ans[4]+ans[7]+ans[8])%4==4-clo[7])
if((ans[5]+ans[7]+ans[8]+ans[9])%4==4-clo[8])
if((ans[6]+ans[8]+ans[9])%4==4-clo[9])
最后再用一个bool类型变量判重,最后输出。(其实我是为了压行)
for(ans[1]=0;ans[1]<=3;ans[1]++)
for(ans[2]=0;ans[2]<=3;ans[2]++)
for(ans[3]=0;ans[3]<=3;ans[3]++)
for(ans[4]=0;ans[4]<=3;ans[4]++)
for(ans[5]=0;ans[5]<=3;ans[5]++)
for(ans[6]=0;ans[6]<=3;ans[6]++)
for(ans[7]=0;ans[7]<=3;ans[7]++)
for(ans[8]=0;ans[8]<=3;ans[8]++)
for(ans[9]=0;ans[9]<=3;ans[9]++)
if((ans[1]+ans[2]+ans[4])%4==4-clo[1])
if((ans[1]+ans[2]+ans[3]+ans[5])%4==4-clo[2])
if((ans[2]+ans[3]+ans[6])%4==4-clo[3])
if((ans[1]+ans[4]+ans[5]+ans[7])%4==4-clo[4])
if((ans[1]+ans[3]+ans[5]+ans[7]+ans[9])%4==4-clo[5])
if((ans[3]+ans[5]+ans[6]+ans[9])%4==4-clo[6])
if((ans[4]+ans[7]+ans[8])%4==4-clo[7])
if((ans[5]+ans[7]+ans[8]+ans[9])%4==4-clo[8])
if((ans[6]+ans[8]+ans[9])%4==4-clo[9])
if(!f)
for(int i=1;i<=9;i++)
if(ans[i]>=1)
while(ans[i]--)
cout<<i<<" ",f=1;
把输入补全即可。
这道题目虽然在现在看来很水,但在那个信息学刚发展起来的年代,能举办全球性的比赛是已经非常了不起了。(C++诞生于1988年,python诞生于1990年)
最后,祝大家水题愉快