大意: $n$个石子, 第$i$个石子初始位置$s_i$, 每次操作选两个石子$i,j$, 要求$s_i<s_j$, 任取$d$, 满足$0\le 2d\le s_j-s_i$, 将$s_i,s_j$改为$s_i+d,s_j-d$. 给定数组$t$, 求是否能将所有石子位置摆成数组$t$.

没要求最小化操作数, 所以直接贪心选即可, 操作数一定是不超过$n$的.

这场当时没时间打, 感觉好亏.

#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <string.h>
#include <bitset>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
#define DB(a) ({REP(__i,1,n) cout<<a[__i]<<' ';hr;})
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+7, P2 = 998244353, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n) {ll r=1%P;for (a%=P;n;a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
ll inv(ll x){return x<=1?1:inv(P%x)*(P-P/x)%P;}
inline int rd() {int x=0;char p=getchar();while(p<'0'||p>'9')p=getchar();while(p>='0'&&p<='9')x=x*10+p-'0',p=getchar();return x;}
//headconst int N = 1e6+10;int n, c1, d1;
struct _ {int x,id;bool operator < (const _ &rhs) const {return x<rhs.x;}
} a[N], b[N], c[N], d[N];
int p1[N],p2[N],p3[N],cnt,f[N];
void add(int x, int y, int v) {++cnt;if (f[x]>f[y]) puts("NO"),exit(0);p1[cnt]=x,p2[cnt]=y,p3[cnt]=v;f[x]+=v,f[y]-=v;
}
int main() {scanf("%d", &n);ll s1=0,s2=0;REP(i,1,n) { scanf("%d",&a[i].x),a[i].id=i,s1+=a[i].x;f[i]=a[i].x;}REP(i,1,n) scanf("%d",&b[i].x),b[i].id=i,s2+=b[i].x;if (s1!=s2) return puts("NO"),0;sort(a+1,a+1+n);sort(b+1,b+1+n);REP(i,1,n) {if (a[i].x<b[i].x) c[++c1]={b[i].x-a[i].x,a[i].id};else if (a[i].x>b[i].x) d[++d1]={a[i].x-b[i].x,a[i].id};}sort(d+1,d+1+d1,[](_ x,_ y){return f[x.id]>f[y.id];});sort(c+1,c+1+c1,[](_ x,_ y){return f[x.id]>f[y.id];});int now = 1;REP(i,1,d1) {while (now<=c1&&c[now].x<=d[i].x) {add(c[now].id,d[i].id,c[now].x);d[i].x-=c[now].x, ++now;}if (d[i].x) {add(c[now].id,d[i].id,d[i].x);c[now].x-=d[i].x;}}puts("YES");printf("%d\n",cnt);REP(i,1,cnt) printf("%d %d %d\n",p1[i],p2[i],p3[i]);
}

转载于:https://www.cnblogs.com/uid001/p/10966682.html

Earth Wind and Fire CodeForces - 1148E (构造)相关推荐

  1. Codeforces 1188A 构造

    题意:给你一颗树,树的边权都是偶数,并且边权各不相同.你可以选择树的两个叶子结点,并且把两个叶子结点之间的路径加上一个值(可以为负数),问是否可以通过这种操作构造出这颗树?如果可以,输出构造方案.初始 ...

  2. Dividing the numbers CodeForces - 899C (构造)

    大意: 求将[1,n]划分成两个集合, 且两集合的和的差尽量小. 和/2为偶数最小差一定为0, 和/2为奇数一定为1. 显然可以通过某个前缀和删去一个数得到. #include <iostrea ...

  3. Codeforces Global Round 3

    Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...

  4. Java入门超简单程序Song List

    题目 The goal of this project is to write an application for maintaining a list of songs. Each song ha ...

  5. [贪心专题]CF549G,CF351E,CF226D,CF1276C,CF1148E,CF798D

    文章目录 T1:CF1276C Beautiful Rectangle title solution code T2:CF226D The table title solution code T3:C ...

  6. oracle marley,滚石杂志500大专辑,对欧美音乐感兴趣的可以找来听听。

    滚石杂志于2003年11月评选出的滚石杂志五百大专辑.值得一提的是,披头士乐队占据了前五中的三席,前五十中的7席,正式出版的专辑几乎全部入选前五百. 排名 演唱者 专辑 001 披头士乐队(The B ...

  7. cf1200构造15道

    最近做构造,想对比下先做后看答案归纳,留下思路之后直接看答案归纳,然后再统一检测,还有直接看答案,归纳,检测三种方法哪种效率高些,于是先做个十五题试试第一个方法,花3天写了15道构造,等到归纳的时候已 ...

  8. MDN文档基础知识搜集

    Array 数组,一种允许你存储多个值在一个引用里的结构. var myVariable = [1,'Bob','Steve',10]; 引用数组的元素只需:myVariable[0], myVari ...

  9. 项目练习(二)—微博数据结构化

    1.ETL概念        ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).交互转换(transform).加载(load)至 ...

最新文章

  1. 两种常见的点云配准方法ICPNDT
  2. 【统计学习方法】线性可分支持向量机对鸢尾花(iris)数据集进行二分类
  3. linux查看信息文件,lsof---Linux查看文件信息的强大工具
  4. eclipse 新建java无scr_解决eclipse中没有js代码提示的问题
  5. 传智播客全栈_播客:从家庭学生到自学成才的全栈开发人员
  6. java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具
  7. 我是怎么用缠论在商品里边抢钱之二 (2019-07-12 15:10:10)
  8. Gradle在Android中的基本使用
  9. ffmpeg超详细综合教程——摄像头直播
  10. PyQt5+爬虫打造磁力链接搜索工具
  11. PMP/PRINCE2/IPMP/软考,主流项目管理认证对比
  12. Ant Design 框架
  13. Ios 原生开发笔记
  14. 云计算,大数据,人工智能本质和概念
  15. 踏歌黑名单工具类DEMO(AUB)
  16. LitePal使用踩坑指南
  17. 【紫光同创国产FPGA教程】【第九章】HDMI编程测试实验
  18. RTC直播与RTMP直播
  19. Iterator详解
  20. 访问hfds报错AccessControlException

热门文章

  1. javaScript 计算两个日期的天数相差~~~
  2. 利用汇编挖掘编程语言的本质
  3. Nosql进阶笔记之redis MongoDB
  4. 海龟交易法则09_海龟式积木
  5. docker入门(基于虚拟化技术)
  6. 数据分析学习笔记-数据分析预备知识
  7. ubtunu打开firefox_在Ubuntu中安装Mozilla Firefox的4种方法
  8. 平昌一中高考2021成绩查询,2019年四川省平昌中学高考喜报
  9. 华为ax3怎么接光纤sc接口_光纤收发器接口类型、连接、指示灯说明及故障症断...
  10. Matplotlib库入门