我真是菜哭了,这个题题意都纠结了老久。最后总算明白,这个题应该是问,当岛上有a个人时,让这a个人的敌友关系最坏,然后求这种情况下,需要最少的石子种类数,然后和b比较,如果比b大,输出F,否则,输出T。
也就是可以理解为,在(不同的敌友关系下需要的石子种类的最小值)的最大值。我一开始以为2*a是最大,后来发现不是这么简单。
看了大佬的博客,我们假设x个人互相敌对,然后有y个人与这x个人都是朋友,而这y个人互相敌对。
则有
x+y=m
x*y<=n
当x 和 y相等时,x*y<=m^2/4;
判断n和m^2/4的大小
感觉很有道理,大佬就是大佬,可是仔细一想,题意没说敌人的敌人就是朋友啊。敌人的敌人难道不能是敌人?而且题意不是说敌人必须要有两个及以上的不同石子吗?
于是在大佬的讲解上又把我自己的想法加进去了,结果也A了。而且一样的数据,不一样的输出,英语菜的我不知所措中。到底怎么才算对???
已经提问,要是他回答了我就来更新
code:
#include<cstdio>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==1)
printf("T\n");
else if(a<=32)
{
if(b>=2*a)
printf("T\n");
else
printf("F\n");
}
else if(a>32)
{
if(a/2*(a-a/2)<=b)
printf("T\n");
else
printf("F\n");
}
}
return 0;
}