Description
有一户小区有n户人家,每户人家养了一条狗。有一天,小区接到防疫站的通知,小区内有病狗。所有的小区居民都必须将自己的狗带回自己的家中。每户居民都可以观察到其他居民的狗,并准确判断哪些狗是病狗,但是却不能正确判断自己家的狗是否得病。但是,小区居民之间相互无法沟通。小区规定,如果断定自家的狗是病狗,必须当天开枪将其击毙。每户居民都是极其理智的。到了第K天,小区传出枪声,问:有多少条狗被击毙?
Input
输入包括多组测试数据,请处理到EOF为止。
每组测试数据为一行,包括两个正整数n (n<=5000) 和k (k<=5000)。
每组测试数据为一行,包括两个正整数n (n<=5000) 和k (k<=5000)。
Output
对于每组输入数据,请输出一行,即被击毙的病狗数。
50 1
200 2
200 2
1
2
2
Hint
智力题目
下面是AC代码:
#include<stdio.h>
int main()
{
int i,j,k,n,day=1,m;
while(scanf("%d %d",&n,&k)!=EOF)
printf("%d\n",k);
return 0;
}
首先,假设n户人家中有一条病狗,那么在第一天病狗主人不会看到病狗。又已知有病狗,所以这条只能是自己的狗,于是第一天就会传出枪响。假设有2条病狗,
这两条病狗的主人是a,b.那么a会看到一只病狗,b
也会看到一只病狗,对于a来说,如果只有一条病狗,那么b家的狗就必须死。可是第一天没有听到枪声,第二天发现b家的狗没有死,
那么说明病狗不止一条,(因为b也看到了病狗,以为只有一条病狗,所以没有开枪)又没看出其他的狗有病,那么病狗只可能在自己家了,因此a会开枪,同理b在第二天也会开枪。那么第二天会死两只狗。假设有三条病狗,a只会看到两只病狗,而认为自己的狗好的情况下,第一天没有开枪,第二天也没开枪(前提是一天只能看一次,也就是一天指能发现一只是病狗),这时第二天看到了两条病狗了,可是第二天晚上还没有听到枪声,那么第三天会发现没有狗死,那么不止两条狗,而其他的狗又都是好狗,那么只可能病狗是自家的了,同理其他两个人也会这么认为,那么第三天会听到枪声,那么第三天会有三只狗死。【原引自新浪博客:http://blog.sina.com.cn/s/blog_3d28a5d30100yrwe.html】。
如此推算下去,若是有k条病狗,则所有有病狗的居民最晚会在第k天开枪,所以得到此结论。