尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CF1774D Same Count One

CF1774D Same Count One 题目大意一共 T 组测试数据对于每组测试数据。给出 n 组数每组 m 个数。其中数只有可能是 0 或 1。可以在任意两组数中交换相同位置的数求最少几次变换后可以使每组数 1 的数量一致。输出变换次数与具体是如何变换的。如果无法满足题意输出 −1。简单分析什么样是输出 −1 的情况。设 n 组数中一共有 a 个 1。则每组中1的数量为 a/n而如果 a/n 不是整数说明无法每组平均分输出 −1 即可。深入探讨剩余情况如何解决。设正常每组中应有 1 的数量为 t而现在组中有 o 个 1。则如果 ot 说明应该有一些 1 变为 0而如果当前 i 位置是 1就统计起来。同理如果 ot说明应该有一些 0 应变为 1而如果当前位置 i 位置是 0也统计起来。而最小次数用 len 表示即可在记录上文所说的两种情况中变动就好了。主要代码。for(int i1;im;i){ int t10,t20; for(int j1;jn;j){ if(cnt[j]tp[j][i]1) a[t1]j; if(cnt[j]tp[j][i]0) b[t2]j; } for(int j1;jmin(t1,t2);j){ ans[len].xb[j]; ans[len].ya[j]; ans[len].zi; cnt[a[j]]--; cnt[b[j]]; } } coutlen\n; for(int i1;ilen;i){ coutans[i].x ans[i].y ans[i].z\n; }整体代码。#includebits/stdc.h using namespace std; const int N200005; int T,n,m,len,cnt[N],a[N],b[N]; vectorint p[N];//统计每组1的数量 struct node{ int x,y,z; }; node ans[N];//统计题目所说的答案 int main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cinT; while(T--){ memset(a,0,sizeof a); memset(b,0,sizeof b); memset(cnt,0,sizeof cnt); int t0; cinnm; for(int i1;in;i){ p[i].clear(); p[i].push_back(0); for(int j1;jm;j){ int x; cinx; p[i].push_back(x); tx; cnt[i]x; } } if(t%n!0){//判断是否有解 cout-1\n; continue; } t/n; len0; for(int i1;im;i){ int t10,t20; for(int j1;jn;j){ if(cnt[j]tp[j][i]1) a[t1]j; if(cnt[j]tp[j][i]0) b[t2]j; } for(int j1;jmin(t1,t2);j){ ans[len].xb[j]; ans[len].ya[j]; ans[len].zi; cnt[a[j]]--; cnt[b[j]]; } } coutlen\n; for(int i1;ilen;i){ coutans[i].x ans[i].y ans[i].z\n; } } return 0; }
返回列表