CodeForces - 1417
A - Copy-paste
优先把最小的加给别人
再用次小的加给最小的
猜的..
int t,n,k,a[maxn];
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
rep(i,1,n)scanf("%d",&a[i]);
sort(a+1,a+1+n);
int ans=0;
rep(i,2,n)ans+=(k-a[i])/a[1],a[i]+=((k-a[i])/a[1])*a[1];
sort(a+1,a+1+n);
ans+=(k-a[1])/a[2];
W(ans);
}
return 0;
}
B - Two Arrays
1,2,3,4,...T/2...T
把左边归为一类,右边归为一类,相加起来永远不会为T
如果等于T/2的,如果全分到一边显然是最大的,平分是最小的
int t,n,T,a[maxn];
int main()
{
scanf("%d",&t);
while(t--)
{
int num=0;
scanf("%d%d",&n,&T);
rep(i,1,n)scanf("%d",&a[i]);
rep(i,1,n)if (a[i]==T/2&&T%2==0)num++;
num/=2;
if (T%2!=0)
{
rep(i,1,n)
{
if (a[i]<=T/2)printf("1 ");
else printf("0 ");
}
}
else
{
rep(i,1,n)
{
if (a[i]<T/2)printf("1 ");
else if (a[i]==T/2&&num)
{
printf("%d ",1);
num--;
}
else printf("0 ");
}
}
puts("");
}
return 0;
}
C - k-Amazing Numbers
dis[i]表示i这个数字最多隔几个数字出现一次
例如4 5 5 3 4中 dis[4]=4,dis[3]=4
(不要忘记算开头和结尾)
dis[i]最多隔几个数字的意思就是i可以作为dis[i]+1,dis[i]+2...,n的答案
因为每隔a个数字都会出现i,那么每隔a+1个数字也当然会出现i
const int maxn=3e5+7;
const int INF=0x3f3f3f3f;
const ll INFF=1e18;
int dis[maxn],t,n,a[maxn],last[maxn],ans[maxn];
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
rep(i,1,n)dis[i]=ans[i]=-1,last[i]=0;
rep(i,1,n)
{
scanf("%d",&a[i]);
dis[a[i]]=max(dis[a[i]],i-last[a[i]]);
last[a[i]]=i;
}
rep(i,1,n)dis[a[i]]=max(dis[a[i]],n+1-last[a[i]]);
rep(i,1,n)
{
if (dis[i]==-1)continue;
rep(j,dis[i],n)
{
if (ans[j]!=-1)break;
ans[j]=i;
}
}
rep(i,1,n)printf("%d ",ans[i]);puts("");
}
return 0;
}
D - Make Them Equal
在非1的位置,先用自身的减法和1的减法,把自身变为0
然后最后用1的减法,把非1的位置加到平均值
最多每个位置有3次操作,所以限制了k<3*n
struct node
{
int x,y,val;
}p[maxn];
int t,n,a[maxn];
vector<node>ans;
int main()
{
scanf("%d",&t);
while(t--)
{
int sum=0;
ans.clear();
scanf("%d",&n);
rep(i,1,n)scanf("%d",&a[i]),sum+=a[i];
if (sum%n)
{
W(-1);
continue;
}
int avg=sum/n;
rep(i,2,n)
{
if (a[i]%i==0)ans.pb(node{i,1,a[i]/i});
else
{
ans.pb(node{1,i,i-(a[i]%i)});
ans.pb(node{i,1,a[i]/i+1});
}
}
rep(i,2,n)ans.pb(node{1,i,avg});
W(ans.size());
repp(i,0,ans.size())printf("%d %d %d\n",ans[i].x,ans[i].y,ans[i].val);
}
return 0;
}