HDU-5874-Friends and Enemies-构造+找规律

题目链接

题意:岛上有m个人(每个人之间要不是朋友,要不是敌人,朋友的朋友可能是朋友,敌人的敌人可能敌人),n种石头,每种石头个数不限,每个用石头串一个项链,两个朋友之间一定至少要用一个石头颜色相同,任何两个敌人之间所有石头颜色都不一样,问对于任何一种情况(敌我关系网),是否都可以有一种项链分配法。

思路:显然这题可以转换成给你一个n求最小的ans判断ans和m的关系。

首先,n一定要>=m,因为一种显而易见的情况就是,每个人都是敌人,那每个人带一个不同的石头。

然后分析可不可以有需要石头更多的情况。我们发现可以这么构造,把人分成两堆,一堆中的人都是敌人,一堆中的一个和另外一组的都是朋友。这样设两堆分别有x和y个,就需要至少x*y个。

所以最后的ans=max((M/2)*(M-M/2),M)

最后和n比较一下就好了

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n,m,ans;
    while(scanf("%lld%lld",&m,&n)!=EOF) {
        ans=max(m,(m/2)*(m-m/2));
        if(ans<=n) {
            printf("T\n");
        }
        else {
            printf("F\n");
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值