Earth Wind and Fire CodeForces - 1148E (构造)
大意: $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 (构造)相关推荐
- Codeforces 1188A 构造
题意:给你一颗树,树的边权都是偶数,并且边权各不相同.你可以选择树的两个叶子结点,并且把两个叶子结点之间的路径加上一个值(可以为负数),问是否可以通过这种操作构造出这颗树?如果可以,输出构造方案.初始 ...
- Dividing the numbers CodeForces - 899C (构造)
大意: 求将[1,n]划分成两个集合, 且两集合的和的差尽量小. 和/2为偶数最小差一定为0, 和/2为奇数一定为1. 显然可以通过某个前缀和删去一个数得到. #include <iostrea ...
- Codeforces Global Round 3
Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...
- Java入门超简单程序Song List
题目 The goal of this project is to write an application for maintaining a list of songs. Each song ha ...
- [贪心专题]CF549G,CF351E,CF226D,CF1276C,CF1148E,CF798D
文章目录 T1:CF1276C Beautiful Rectangle title solution code T2:CF226D The table title solution code T3:C ...
- oracle marley,滚石杂志500大专辑,对欧美音乐感兴趣的可以找来听听。
滚石杂志于2003年11月评选出的滚石杂志五百大专辑.值得一提的是,披头士乐队占据了前五中的三席,前五十中的7席,正式出版的专辑几乎全部入选前五百. 排名 演唱者 专辑 001 披头士乐队(The B ...
- cf1200构造15道
最近做构造,想对比下先做后看答案归纳,留下思路之后直接看答案归纳,然后再统一检测,还有直接看答案,归纳,检测三种方法哪种效率高些,于是先做个十五题试试第一个方法,花3天写了15道构造,等到归纳的时候已 ...
- MDN文档基础知识搜集
Array 数组,一种允许你存储多个值在一个引用里的结构. var myVariable = [1,'Bob','Steve',10]; 引用数组的元素只需:myVariable[0], myVari ...
- 项目练习(二)—微博数据结构化
1.ETL概念 ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).交互转换(transform).加载(load)至 ...
最新文章
- 两种常见的点云配准方法ICPNDT
- 【统计学习方法】线性可分支持向量机对鸢尾花(iris)数据集进行二分类
- linux查看信息文件,lsof---Linux查看文件信息的强大工具
- eclipse 新建java无scr_解决eclipse中没有js代码提示的问题
- 传智播客全栈_播客:从家庭学生到自学成才的全栈开发人员
- java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具
- 我是怎么用缠论在商品里边抢钱之二 	(2019-07-12 15:10:10)
- Gradle在Android中的基本使用
- ffmpeg超详细综合教程——摄像头直播
- PyQt5+爬虫打造磁力链接搜索工具
- PMP/PRINCE2/IPMP/软考,主流项目管理认证对比
- Ant Design 框架
- Ios 原生开发笔记
- 云计算,大数据,人工智能本质和概念
- 踏歌黑名单工具类DEMO(AUB)
- LitePal使用踩坑指南
- 【紫光同创国产FPGA教程】【第九章】HDMI编程测试实验
- RTC直播与RTMP直播
- Iterator详解
- 访问hfds报错AccessControlException