链接:https://ac.nowcoder.com/acm/contest/3402/F
来源:牛客网
题目描述:
jx队长半夜@小胖:你快出一道签到题呀,简单点的,不行打你啊。小胖吓得赶紧下床想题,边想边和jx队长吹水,想起了参加acm的种种经历。有感而发和jx队长说了想法之后,jx队长:你这什么题意,不行啊太难了,我来改。一顿争辩之后小胖折服了,内心:jx队长牛逼。jx队长:睡吧睡吧,找时间请你喝奶茶。
众所周知:icpc赛制中,一支队伍由三个队员和一个教练组成,一个教练可以兼任多个队伍的教练;天梯赛赛制中,一支队伍由十个队员组队和一个教练组成,一个教练可以兼任多个队伍的教练;同时,一个队员可以同时参与两种比赛,但不能同时参与同一比赛的不同队伍。
如果参赛队的Q群里教练和队员的人数共有n人,参赛队是否刚好所有人都能同时组成队伍参赛?
输入描述:
多测试用例
每组测试用例一行,包括一个整数n(1≤n≤300),表示群内的人数有n人
输出描述:
对于每组测试用例
如果所有人都能同时参加两种比赛,请输出All;
如果所有人都能同时参加icpc但不能同时参加天梯赛,请输出First;
如果所有人都能同时参加天梯赛不能同时参加icpc,请输出Second;
否则请输出No。
输入样例:
11
7
9
10
100
输出样例:
All
First
No
First
First
核心思想:
对于某个赛事,假设有n人,每队k个队员+1位教练,队员只能在一支队伍,教练可以执教多支队伍,所以教练的数量范围为[1,队伍数量]。
如果n%k==0,则拿出k人做教练,n-k为队员数(队伍数为n/k-1)。
否则,n%k为教练数,n-n%k为队员数(队伍数为n/k)。
代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
bool fun(int n,int k)
{
if(n%k==0&&n/k-1>=k)
return 1;
if(n%k>0&&n/k>=n%k)
return 1;
return 0;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int a=fun(n,3);
int b=fun(n,10);
if(a&b) printf("All\n");
else if(a) printf("First\n");
else if(b) printf("Second\n");
else printf("No\n");
}
return 0;
}