A-C题解
A. Destroyer
题解
发现只要大的数不比小的数多就行
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=105;
int a[N];
int cnt[N];
int main(){
ios::sync_with_stdio(false);
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
memset(cnt,0,sizeof(cnt));
int M=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
M=max(M,a[i]);
cnt[a[i]]++;
}
bool flag=false;
for(int i=0;i<M;i++)
{
if(cnt[i+1]>cnt[i])
{
flag=true;
break;
}
}
if(flag)
cout<<"NO"<<'\n';
else
cout<<"YES"<<'\n';
}
return 0;
}B. Astrophysicists
题解
可以发现每个人都尽可能拿多一点(模后余数小于
但是并不是全拿最多是最优的
同时可以发现能赚的总银币数一定能被
这是因为
如果每个人都拿尽可能多的银币(指模后余数尽可能接近
那么满足条件的赚的最多的银币数为
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ceil(ll n,ll k)
{
if(n%k==0)
return n/k;
return n/k+1;
}
int main() {
ios::sync_with_stdio(false);
int T;
cin>>T;
while(T--)
{
ll n,k,g;
cin>>n>>k>>g;
if(n<=2)
cout<<0<<'\n';
else
cout<<min(k*g,n*(ceil(g,2)-1)/g*g)<<'\n';
}
return 0;
}