CF1416B Make Them Equal 题解
解题思路
观察可以发现,每次操作后序列元素之和不变,那么我们可以将每一次操作看作是
因为每次移动时移动的数应为
AC 代码
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<set>
#define N 100005
int n,a[N],sum,mint[N];
struct ANS{
int i,j,x;
};
struct Point{
int cos;
int val;
int pos;
};
struct cmp{
inline bool operator ()(
const Point A,
const Point B
) const {
if(A.cos!=B.cos)
return A.cos<B.cos;
return A.val>B.val;
}
};
inline void work(){
scanf("%d",&n);sum=0;
std::vector<ANS> ans;
for(register int i=1;i<=n;++i)
scanf("%d",&a[i]),sum+=a[i];
if(sum%n!=0){puts("-1");return;}
int Average=sum/n;
for(register int i=2;i<=n;++i){
int res=i-(a[i]%i);if(a[i]%i){
ans.push_back({1,i,res});
a[1]-=res,a[i]+=res;
}ans.push_back({i,1,a[i]/i});
}
for(register int i=2;i<=n;++i)
ans.push_back({1,i,Average});
printf("%d\n",ans.size());
for(auto now:ans){
printf("%d ",now.i);
printf("%d ",now.j);
printf("%d\n",now.x);
}
}
signed main(){
int T;scanf("%d",&T);
while(T--) work();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示