[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个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
随机推荐
- 一个JavaScript反射使用的例子
反射机制指的是程序在运行时能够获取自身的信息.例如一个对象能够在运行时知道自己有哪些方法和属性.在JavaScript中有一个很方便的语法来实现反射,即for(…in…)语句,其语法如下: 1 for ...
- HDU 1394 Minimum Inversion Number(树状数组/归并排序实现
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- python爬取七星彩的开奖历史记录
1.因为人不可能一直无休止的学习,偶尔也想做点儿别的,昨天无聊就想写写Python,当然我承认我上班后基本都是在学工作方面的事情,在这个岗位我也呆了三年多了,还是那句话问我什么会不会我会给你说我啥都会 ...
- php函数-shuffle
Shuffle()函数说明: -随机乱序现有数组并不保留键值: -shuffle()函数把数组中的元素按随机顺序重新排列,该函数为数组中的元素分配新的键名,已有键名将被删除. 语法说明: shuffl ...
- supervisor提高nodejs调试效率
1.NodeJS环境安装 2.安装supervisor npm install supervisor -g (表示安装到全局路径下) 开发nodejs程序,调试的时候,无论你修改了代码的哪一部分,都 ...
- codechef T1 What's int the name
NITIKA: 姓名本无意题目描述 Nitika 读了一本历史书,想要理清其中的人物关系.因此她要她的哥哥把书中出现的历史人 物全部列出来.哥哥把列好的人名给了 Nitika,但 Nitika 非常不 ...
- 【BZOJ】1579: [Usaco2009 Feb]Revamping Trails 道路升级
[算法]分层图最短路 [题解] 考虑k层一模一样的图,然后每个夹层都在每条边的位置新加从上一层跨越到下一层的边权为0的边,这样至多选择k条边置为0. 然后考虑方便的写法. SPFA 第一次SPFA计算 ...
- bzoj 1301 后缀数组
比较裸的后缀数组. /************************************************************** Problem: User: BLADEVIL La ...
- Linux中生成Core Dump系统异常信息记录文件的教程
Linux中生成Core Dump系统异常信息记录文件的教程 http://www.jb51.net/LINUXjishu/473351.html
- python中deque类详解
最近在pythonTip做题的时候,遇到了deque类,以前对其不太了解,现在特此总结一下 deque类是python标准库collections模块中的一项,它提供了两端都可以操作的序列,这意味着, ...