IOI最水题

大家都知道,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年)
最后,祝大家水题愉快

3 个赞

那个绿确实简单,但是第一眼看到绿标时候就感觉不想做了

求点赞

已赞

多了一道水绿(还没做),hh,今天打算该他水了

\Huge\color{red}{建\,\,\,\,\,\,\,\,议\,\,\,\,\,\,\,\,评\,\,\,\,\,\,\,\,红}

这道水绿也是直接切了好吧

有没有一种可能,这是给人练习搜索时的难度?

就算是dfs也最多评黄,甚至可以评橙

如果我说, 我说假如, 你不会DFS

不要以自己现在简陋的知识去试图限制一个算法

我没说dfs简单,我只说了这道题用dfs实现简单

我确实蒟蒻,刚学完基础算法

(帖子已被作者删除)

卡 bug?