代碼模擬器,Codeforces 439C Devu and Partitioning of the Array(模擬)

 2023-10-21 阅读 22 评论 0

摘要:題目鏈接:Codeforces 439C?Devu and Partitioning of the Array? 題目大意:給出n個數,要分成k份,每份有若干個數,可是僅僅須要關注該份的和為奇數還是偶數,要求偶數堆的個數為p。輸出方案。 代碼模擬器? 解題思路:首先先將數組依

題目鏈接: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++]);elsereturn 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");}} elseprintf("NO\n");return 0;
}

code1083、

轉載于:https://www.cnblogs.com/mengfanrong/p/5058893.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/155610.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息