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