codeforces 251 div2 C. Devu and Partitioning of the Array 模拟
1 second
256 megabytes
standard input
standard output
Devu being a small kid, likes to play a lot, but he only likes to play with arrays. While playing he came up with an interesting question which he could not solve, can you please solve it for him?
Given an array consisting of distinct integers. Is it possible to partition the whole array into k disjoint non-empty parts such that p of the parts have even sum (each of them must have even sum) and remaining k - p have odd sum? (note that parts need not to be continuous).
If it is possible to partition the array, also give any possible way of valid partitioning.
The first line will contain three space separated integers n, k, p (1 ≤ k ≤ n ≤ 105; 0 ≤ p ≤ k). The next line will contain n space-separated distinct integers representing the content of array a: a1, a2, ..., an (1 ≤ ai ≤ 109).
In the first line print "YES" (without the quotes) if it is possible to partition the array in the required way. Otherwise print "NO" (without the quotes).
If the required partition exists, print k lines after the first line. The ith of them should contain the content of the ith part. Print the content of the part in the line in the following way: firstly print the number of elements of the part, then print all the elements of the part in arbitrary order. There must be exactly p parts with even sum, each of the remaining k - p parts must have odd sum.
As there can be multiple partitions, you are allowed to print any valid partition.
5 5 3
2 6 10 5 9
YES
1 9
1 5
1 10
1 6
1 2
5 5 3
7 14 2 9 5
NO
5 3 1
1 2 3 7 5
YES
3 5 1 3
1 7
1 2
题意:给你n个数,分成m堆,这些堆的和为偶数的堆为p堆;
思路:分析清楚情况就是,偶数永远是偶数,但是两个奇数可以组成一个偶数;
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
using namespace std;
#define ll __int64
#define mod 1000000007
#define inf 999999999
//#pragma comment(linker, "/STACK:102400000,102400000")
int scan()
{
int res = , ch ;
while( !( ( ch = getchar() ) >= '' && ch <= '' ) )
{
if( ch == EOF ) return << ;
}
res = ch - '' ;
while( ( ch = getchar() ) >= '' && ch <= '' )
res = res * + ( ch - '' ) ;
return res ;
}
int even[],ji;
int odd[],ou;
int main()
{
int x,y,z,i,t;
int n,k,p;
scanf("%d%d%d",&n,&k,&p);
for(i=;i<n;i++)
{
scanf("%d",&z);
if(z&)
even[ji++]=z;
else
odd[ou++]=z;
}
if(ji<k-p||(ji-k+p)&)
{
printf("NO\n");
return ;
}
else
{
if(ou+(ji-k+p)/<p)
{
printf("NO\n");
return ;
}
else
{
printf("YES\n");
if(p==)
{
for(i=;i<k-p-;i++)
printf("1 %d\n",even[i]);
printf("%d",ji-k++ou);
for(i=k-p-;i<ji;i++)
printf(" %d",even[i]);
for(i=;i<ou;i++)
printf(" %d",odd[i]);
printf("\n");
}
else if(ou<p)
{
int fuck=k-p;
for(i=;i<k-p;i++)
printf("1 %d\n",even[i]);
for(i=;i<ou;i++)
printf("1 %d\n",odd[i]);
for(i=;i<p-ou-;i++)
printf("2 %d %d\n",even[fuck++],even[fuck++]);
printf("%d",ji-fuck);
for(i=fuck;i<ji;i++)
printf(" %d",even[i]);
printf("\n");
}
else
{
for(i=;i<k-p;i++)
printf("1 %d\n",even[i]);
for(i=;i<p-;i++)
printf("1 %d\n",odd[i]);
printf("%d",n-k+);
for(i=k-p;i<ji;i++)
printf(" %d",even[i]);
for(i=p-;i<ou;i++)
printf(" %d",odd[i]);
printf("\n");
}
}
}
return ;
}
codeforces 251 div2 C. Devu and Partitioning of the Array 模拟的更多相关文章
- Codeforces 439C Devu and Partitioning of the Array(模拟)
题目链接:Codeforces 439C Devu and Partitioning of the Array 题目大意:给出n个数,要分成k份,每份有若干个数,可是仅仅须要关注该份的和为奇数还是偶数 ...
- codeforces 251 div2 D. Devu and his Brother 三分
D. Devu and his Brother time limit per test 1 second memory limit per test 256 megabytes input stand ...
- CodeForce 439C Devu and Partitioning of the Array(模拟)
Devu and Partitioning of the Array time limit per test 1 second memory limit per test 256 megabytes ...
- CF 439C Devu and Partitioning of the Array
题目链接: 传送门 Devu and Partitioning of the Array time limit per test:1 second memory limit per test: ...
- CF 439C(251C题)Devu and Partitioning of the Array
Devu and Partitioning of the Array time limit per test 1 second memory limit per test 256 megabytes ...
- Codeforces Round #251 (Div. 2) C. Devu and Partitioning of the Array
注意p的边界情况,p为0,或者 p为k 奇数+偶数 = 奇数 奇数+奇数 = 偶数 #include <iostream> #include <vector> #include ...
- codeforces 439D Devu and Partitioning of the Array(有深度的模拟)
题目 //参考了网上的代码 注意答案可能超过32位 //要达成目标,就是要所有数列a的都比数列b的要小或者等于 //然后,要使最小的要和最大的一样大,就要移动(大-小)步, //要使较小的要和较大的一 ...
- codeforces 439C Devu and Partitioning of the Array(烦死人的多情况的模拟)
题目 //这是一道有n多情况的烦死人的让我错了n遍的模拟题 #include<iostream> #include<algorithm> #include<stdio.h ...
- codeforces C. Devu and Partitioning of the Array
题意:给你n个数,然后分成k部分,每一个部分的和为偶数的有p个,奇数的有k-p个,如果可以划分,输出其中的一种,不可以输出NO; 思路:先输出k-p-1个奇数,再输出p-1个偶数,剩余的在进行构造. ...
随机推荐
- PAT 1026 Table Tennis[比较难]
1026 Table Tennis (30)(30 分) A table tennis club has N tables available to the public. The tables ar ...
- TFS修改映射路径办法
如果你之前配置好了TFS项目的映射路径.然后每次下载项目都会在你配置的路径,但我们可以修改 方法一:我们可以在 "工作区" 中修改路径
- js删除逗号
var aaa="123,432,34.00 aaa.replace(/,/g, '');
- Amaze UI JS 气泡弹出
http://amazeui.org/javascript/popover?_ver=2.x
- HZNU_TI1050 训练实录
菜鸡队训练实录 比赛记录:[名称:奖项 / 排名] 2018: ZJPSC Bronze / 86 CCPC Jilin ...
- IO(File)
1. 一个File类的对象,表示了磁盘上的文件或目录 2. File类提供了与平台无关的方法来对磁盘上的文件或目录进行操作 3. File对象可用来获取或处理与磁盘文件相关的信息,如:权限,时间,日期 ...
- laravel 对接支付宝
使用的库 omnipay-alipay 申请支付宝支付 这个就不说了, 不明白如何下手的伙伴让运营去和支付宝客服联系吧 composer 安装git库 将以下代码添加到 composer.json { ...
- 02:BeautifulSoup
1.1 BeautifulSoup介绍 1.BeautifulSoup作用 1.BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化 2.之后遍可以使用他 ...
- 对于phy芯片的认识
一,关于phy芯片 以RTL8211E(G)为例 PHY是IEEE802.3中定义的一个标准模块,STA(station management entity,管理实体,一般为MAC或CPU) 通过SM ...
- poj Meteor Shower - 搜索
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16313 Accepted: 4291 Description Bess ...