Codeforces 439C Devu and Partitioning of the Array(模拟)
2024-10-12 09:14:42
题目链接:Codeforces 439C Devu and Partitioning of the Array
题目大意:给出n个数,要分成k份,每份有若干个数,可是仅仅须要关注该份的和为奇数还是偶数,要求偶数堆的个数为p。
输出方案。
解题思路:首先先将数组依照奇偶排序。也能够分开储存。
然后先单独分k-p个奇数,然后后面的就将两个奇数当一个偶数分配。分配过程中计算是否满足,比方说奇数是否成对,以及是否分成了k堆。
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1e5 + 5;
int n, k, p, d[N];
vector<int> g[N];
inline bool cmp (const int& a, const int& b) {
return (a&1) > (b&1);
}
void init () {
scanf("%d%d%d", &n, &k, &p);
for (int i = 0; i < n; i++)
scanf("%d", &d[i]);
sort(d, d + n, cmp);
for (int i = 0; i < k; i++)
g[i].clear();
}
bool judge () {
int mv = 0;
for (int i = 0; i < k - p; i++) {
if (d[mv]&1)
g[i].push_back(d[mv++]);
else
return false;
}
int t = k - p;
while (mv < n) {
t %= k;
if (d[mv]&1) {
g[t].push_back(d[mv++]);
if ((d[mv]&1) != 1 || mv >= n)
return false;
g[t].push_back(d[mv++]);
} else {
g[t].push_back(d[mv++]);
}
t++;
}
if (g[k-1].size() == 0)
return false;
return true;
}
int main () {
init();
if (judge()) {
printf("YES\n");
for (int i = 0; i < k; i++) {
printf("%lu", g[i].size());
for (int j = 0; j < g[i].size(); j++)
printf(" %d", g[i][j]);
printf("\n");
}
} else
printf("NO\n");
return 0;
}
最新文章
- DIV+CSS+JS基础+正则表达式
- Linux基础命令之cat使用方法大全
- [问题2014S02] 解答
- C#中引用类型和值类型
- 深入分析:Fragment与Activity交互的几种方式(三,使用接口)
- 自己写的demo---equals()跟==的区别
- TC598 div2
- 【转】Ubuntu下配置samba服务器--不错
- DBA日常工作职责 - 我对DBA的七点建议
- ccf 火车购票
- Linux常用命令(一)--系统命令
- B树与B+ 树
- 一个真实的Async/Await示例
- numpy.asmatrix的用法
- Ontology Relations
- window下的窗口事件-js
- 【LOJ】#2265. 「CTSC2017」最长上升子序列
- redis知识总汇
- jQuery Easyui Datagrid相同连续列合并扩展
- bzoj1177 [Apio2009]Oil 二维前缀最大值,和
热门文章
- hdu3873 有约束条件的最短路
- ACM:回溯,八皇后问题,素数环
- session与cookie的差别
- hdu - 5045 - Contest(国家压缩dp)
- Net程序员学习Linux
- HDU4870:Rating(DP)
- easyui动力头 &;amp;&;amp; 动态加入tabs
- C++primer读书笔记9-转换和类类型
- 阅读&;lt;反欺骗的艺术&;gt;思考
- 移动应用开发(IOS/android等一下)在一般图像缓存方案评述(附流程图)