Problem - D - Codeforces

题意是给你一个矩阵,输出最小操作数以及操作,使得每一行的1的数量都相等,操作是任意两行同一列的数字交换

分析:

没啥好分析的,这题一看就是模拟。通过分析你会发现,只要数量能整除行数,那就是一定有解的。即使对应的行可能都是1,那必然其他的列会是01或者10。

写这篇题解的原因很简单,这个模拟我写的不优雅,最后写烦了,就去看一下别人的模拟。正好点开了队友的,分析一波,发现他写的超级优雅,就学过来了。记录一下这么优雅的模拟。QAQ,学到了。(第一次我对模拟的代码赞不绝口,呜呜)

(抱怨一下:为什么我最近写的题70%都是模拟和题面很丑让人看不懂的,qaq)

具体怎么实现看代码就好了:

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#define IOS ios::sync_with_stdio(false), cin.tie(0);
#include<iostream>
#include<map>
#include<set>
#include<cstdio>
#include<cstring>
#include<vector>
#include<stack>
#include<algorithm>
#include<cmath>
#include<queue>
#include<deque>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PAII;
const int N=2e6+10,M=5050,INF=1e18,mod=998244353;
struct mess{int x,y,z;
};
vector<mess> res;
int c[N];
vector<int> v[N];
signed main(){//IOS;int T;//T=1;cin>>T;while(T--){res.clear();int n,m;cin>>n>>m;int sum=0;for(int i=1;i<=n;i++) v[i].clear();for(int i=1;i<=n;i++){int cnt=0;v[i].push_back(-1);for(int j=1;j<=m;j++){int x;cin>>x;v[i].push_back(x);if(x==1){sum++;cnt++;}}c[i]=cnt;}if(sum%n!=0){cout<<"-1\n";continue;}int x=sum/n;for(int i=1;i<=m;i++){vector<int> a,b;for(int j=1;j<=n;j++){if(c[j]>x&&v[j][i]) a.push_back(j);if(c[j]<x&&!v[j][i]) b.push_back(j);}for(int j=0;j<min(a.size(),b.size());j++){res.push_back({a[j],b[j],i});c[a[j]]--;c[b[j]]++;}}cout<<res.size()<<"\n";for(int i=0;i<res.size();i++) cout<<res[i].x<<" "<<res[i].y<<" "<<res[i].z<<"\n";}return 0;
}
/**/ 

D. Same Count One div1+div2相关推荐

  1. 【Codeforces #167 Div1 Div2】Solutions

    [A. Dima and Friends] http://www.codeforces.com/contest/272/problem/A 题目大意:n+1个人出手指头,加起来再做类似约瑟夫的出圈,问 ...

  2. 【CF #792 Div1+Div2】A-E

    A. Digit Minimization 题目 分析 每次操作先交换两个数再删去尾端的数,使最后剩余的数最小. 直接判断这个数大于100,每次操作都可以把最小的数留到最后,只有两位数的话只能是个位的 ...

  3. 奇偶分频电路设计(任意占空比、50%占空比)

    一.概述 分频电路一般就是以输入源时钟为参考,将其进行降频输出:分频可以使用锁相环时钟资源实现,也可以计数为基础,进行分频设计.本文主要记录后者的相关问题. 二.偶分频 1.一些概念 分频数:即降频倍 ...

  4. 【jQuery】使用id选择器,找出外层div中嵌套的内层div

    场景:为了实现一个 toggle 效果,即第一次点击一个"添加"按钮之后,会在一个(外层)div的末尾append一个新的(内层)div,第二次点击这个按钮之后,希望这个新增的(内 ...

  5. .NET正则基础之——平衡组

    1        概述 平衡组是微软在.NET中提出的一个概念,主要是结合几种正则语法规则,提供对配对出现的嵌套结构的匹配..NET是目前对正则支持最完备.功能最强大的语言平台之一,而平衡组正是其强大 ...

  6. Uedit32高亮文件(加强)

    替换根目录下 wordfile.txt / /L1"C/C++" C_LANG Line Comment = // Block Comment On = /* Block Comm ...

  7. 3分频器 verilog解析

    <span style="font-size:18px;">分频分为偶分频和奇分频.</span> <span style="font-si ...

  8. js 跳转到指定位置 高德地图_JS控制div跳转到指定的位置的几种解决方案总结

    总结一下自己在写这个需求遇到的问题,相信大家应该是经常遇到的.即要求滚轮滚动到指定的位置.先看下基本的解决方案. 1.给链接a加个#的方式来实现跳转.(锚点方法)这里直接贴下代码: div1 div2 ...

  9. 减治法(Decrease and Conquer)

    减治法 减治法是一种一般性的算法设计技术,它利用了一个问题给定实例的解和同样问题较小实例的解之间的关系.一旦建立了这样一种关系,我们既可以自顶至下(递归)也可以自底至上地运用它(非递归). 减治法有3 ...

最新文章

  1. spring boot 开发 提交form表单出错
  2. hystrix源码小贴士之Yammer Publisher
  3. 这7 款 MySQL 客户端工具,用了都说好!
  4. docker初识_初识 docker 搭建自己的开发环境
  5. 浅谈Time Elastic Band
  6. linux 自动运行.out,linux系统定时自动重启springboot项目
  7. 在 Perl 中使用 Getopt::Long 模块来接收用户命令行参数
  8. Beta阶段第1周/共2周 Scrum立会报告+燃尽图 03
  9. 直接选择排序算法时间 / 空间复杂度
  10. 试简述smtp通信的三个阶段的过程_POP3_SMTP_IMAP初步介绍
  11. vue elementui 表格数据 时间格式转换
  12. Android 扫码盒子全局接收付款码
  13. 迷宫最短路径问题(数据结构4.4.3 拓展)
  14. C语言基础——sizeof的用法总结
  15. 逆向入门(三) CE自动汇编后保存CT表并生成exe修改器
  16. UBTC主网已实现智能合约及混合共识机制!
  17. 侯捷C++课程笔记01: 面向对象高级编程(上)
  18. 传说中的护眼灯真的能护眼吗?护眼台灯怎么样选择比较好
  19. 360浏览器html5脚本,360浏览器运行脚本易培训
  20. 单向链表添加元素操作

热门文章

  1. 提供非法计算机工具罪,提供非法侵入或者控制计算机信息系统的程序、工具罪...
  2. Xsens MTi传感器 ROS下配置
  3. (Frp第一篇)Frp内网穿透安装教程#Frps服务端一键安装脚本#
  4. attention retain_retain
  5. matlab中的routte,matlab外文翻译外文文献英文文献MATALAB混合仿真平台控制算法的概述...
  6. 牛客网 2018年全国多校算法寒假训练营练习比赛(第四场) 题解
  7. Python 剪切板读写
  8. 互联网开发模式:持续集成
  9. 积分签到mysql_积分获取和消费的存储过程
  10. 腾讯新闻每日热点爬取,WebMagic,Java爬虫