Codeforces Round #643 (Div. 2)
作者:互联网
A
等到 \(0\) 出现后就退出
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
int solve(int x) {
int mn=9,mx=0;
while(x>0) {
int p=x%10;
mn=min(mn,p);
mx=max(mx,p);
x/=10;
}
return mn*mx;
}
signed main() {
int t;
cin>>t;
while(t--) {
int x,k;
cin>>x>>k;
--k;
while(solve(x) && k) x+=solve(x), --k;
cout<<x<<endl;
}
}
B
排序后贪心分组即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
int t,n,a[N];
signed main() {
ios::sync_with_stdio(false);
cin>>t;
while(t--) {
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
int ans=0,cnt=0;
for(int i=1;i<=n;i++) {
++cnt;
if(a[i]<=cnt) {
cnt=0;
++ans;
}
}
cout<<ans<<endl;
}
}
C
设 \(f[i]\) 表示满足条件的 \(x+y=i\) 的 \((x,y)\) 数,然后利用 \(f[]\) 的后缀和算答案即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1200005;
int a,b,c,d,e,f,ans,F[N];
signed main() {
cin>>a>>b>>e>>f;
c=b;d=e;
for(int i=1;i<=1e6+8;i++) {
int x1=i>a+d?i-d:a;
int x2=i>b+c?b:i-c;
F[i]=max(0ll,x2-x1+1);
}
for(int i=1e6+5;i>=1;--i) F[i]+=F[i+1];
for(int i=e;i<=f;i++) ans+=F[i+1];
cout<<ans<<endl;
}
D
每个位置分 \(2\),最后一个把余下的全部拿走,不够分则挂。令 \(k=1\)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
int n,s,a[N];
signed main() {
ios::sync_with_stdio(false);
cin>>n>>s;
if(s<2*n) {
cout<<"no";
}
else {
cout<<"yes"<<endl;
for(int i=1;i<n;i++) a[i]=2, s-=2;
a[n]=s;
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
cout<<1<<endl;
}
}
E
三分,检验答案时贪心,设 \(M=\min(M,A+R)\),然后能移动就移动即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
int n,A,R,M,a[N];
int check(int x) {
int ans=0;
int u=0,b=0;
for(int i=1;i<=n;i++) {
if(a[i]>x) u+=a[i]-x;
if(a[i]<x) b+=x-a[i];
}
int d=abs(u-b),m=min(u,b);
if(u>b) ans+=d*R;
if(b>u) ans+=d*A;
ans+=m*M;
return ans;
}
signed main() {
ios::sync_with_stdio(false);
cin>>n>>A>>R>>M;
if(A+R<M) M=A+R;
for(int i=1;i<=n;i++) cin>>a[i];
int l=0,r=1e9;
while(l<r) {
int m1=(2*l+r)/3,m2=(2*r+l+2)/3;
if(check(m1)<check(m2)) r=m2-1;
else l=m1+1;
}
cout<<check(l)<<endl;
}
F
FST了,wa on test 38,就不贴了,待补
总结
F 题 FST 是意料之中的吧,前期题过得太慢了,被A题卡了一刻钟非常不应该
标签:const,int,namespace,Codeforces,long,cin,643,ans,Div 来源: https://www.cnblogs.com/mollnn/p/12902680.html