[Codeforces 26E] MultiThreading
Brief Intro:
给你n个数,每个数有2*CNT[i]个,让你构造一个序列
使得最终的Y值为W(其余见题面)
Solution:
就是一道纯构造的题目:
先把特殊情况特殊处理,接下来考虑一般情况:
如果让每种数字都连续放置,则对于每两个相同的A[i],Y则加一
要想最终Y=W,则要将多余的去除。于是这样构造:
A:1........1211...112 B:11..122..233...344...4.....nn
最终序列分为A段和B段,其中A段仅能使Y+=2,同时去除多余的项
剩余的先计算好后在B中连续放置即可
Code:
#include <bits/stdc++.h> using namespace std; template<class T> inline void putnum(T x)
{
if(x<)putchar('-'),x=-x;
register short a[]={},sz=;
while(x)a[sz++]=x%,x/=;
if(sz==)putchar('');
for(int i=sz-;i>=;i--)putchar(''+a[i]);
putchar(' ');
} int n,w,dat[],res[],sum=,pos=-; int main()
{
cin >> n >> w;
for(int i=;i<=n;i++)
{
cin >> dat[i],sum+=dat[i];
if(dat[i]==) pos=i;
} if(w< || w>sum || (n== && w!=sum) || (w== && pos==-))
return puts("No"),;
puts("Yes"); if(n==)
for(int i=;i<=*dat[];i++) putnum();
else if(w==)
{
dat[pos]--;
putnum(pos);
for(int i=;i<=n;i++)
for(int j=;j<=*dat[i];j++)
putnum(i);
putnum(pos);
}
else
{
w=w-;dat[]--;dat[]--;
for(int i=;i<=n;i++)
while(w && dat[i])
res[i]++,w--,dat[i]--;
putnum();
for(int i=;i<=n;i++)
for(int j=;j<=*dat[i];j++)
putnum(i);
putnum();putnum();
for(int i=;i<=*dat[];i++) putnum();
putnum();
for(int i=;i<=n;i++)
for(int j=;j<=*res[i];j++)
putnum(i);
}
return ;
}
Review:
对于构造题,要利用性质去除不符合条件的项
[Codeforces 26E] MultiThreading的更多相关文章
- codeforce 270B Multithreading
B. Multithreading Emuskald is addicted to Codeforces, and keeps refreshing the main page not to miss ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
随机推荐
- oracle 中的Ipad()函数
本文基于转载: lpad函数从左边对字符串使用指定的字符进行填充.lpad意思是从左边填充的意思. 语法格式如下: lpad( string, padded_length, [ pad_string ...
- GDI+技术
GDI+是GDI的后继者,它是一种构成 Windows XP 操作系统的子系统的应用程序编程接口. 一般来说有3种基本类型的绘图界面,分别为Windows 窗体上的控件.要发送给打印机的页面和内存中的 ...
- 学习记录 Eclipse常用快捷键及其演练
Eclipse中10个最有用的快捷键组合 1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask ...
- 通过yum升级CentOS/RHEL最小化安装
1.如果你有安装CentOS / RHEL最小服务器安装,您可能有很多麻烦没有安装包 2.有一种方法来安装所有的包,需要一个基本的服务器,使用yum groupinstall命令 3.从最小的安装基本 ...
- Zabbix系列之八——安装agent监控windows
一.下载zabbix-agent客户端 被监控的主机装在windows server 2012 64位操作系统,被监控端需要安装: http://www.zabbix.com/downloads/3. ...
- ElasticSearch 例子
ElasticSearch是一个接近实时的搜索平台,它利用Lucese进行文档索引. 本文会写个可以运行的简单例子,方便大家上手,日后深入了解. 需要引入maven依赖 <dependency& ...
- java设计模式之生产者/消费者模式
什么是生产者/消费者模式? 某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产者:而处理数据的模块,就称为消费者 ...
- uliweb框架数据库操作
先安装数据库和相关的库文件 sudo aptitude install python-setuptools sudo easy_install SQLAlchemy sudo easy_install ...
- eclipse xml文件中按alt+/没有提示信息
转载地址:http://blog.sina.com.cn/s/blog_972ddc1b01012mmh.html 今天要写这篇博文是因为遇到这样的不是技术的问题,但找到问题根源再解决这个问题又花费很 ...
- c++深/浅拷贝 && 构造函数析构函数调用顺序练习题
1.深/浅拷贝 编译器为我们提供的合成拷贝构造函数以及合成的拷贝赋值运算符都是浅拷贝.浅拷贝只是做简单的复制,如果在类的构造函数中new出了内存,浅拷贝只会简单的复制一份指向该内存的指针,而不会再开辟 ...