题意:

第一行给出T代表有几个测试样例,

第二行给出n代表有几个人,

第三行给出一个由0和1组成的字符串,0代表女生,1代表男生。

并且第i个人有i个宝石。

现在要把这些人分为四组,G1 G2 两组是女生组,G3 G4两组是男生组。

分配后要满足  (G1+G3)的宝石 ==(G2+G4)的宝石

然后输出这些人被分配到哪一组的字符串。

如果有多个结果随便哪一个都行,如果没有结果输出-1。

思路:

首先把所有宝石的总和判断一下,看看是偶数还是奇数,如果是奇数肯定分不均,直接输出-1.

然后把宝石总和分一半,先给G1和G3组分配人。

也就是从第n个人开始分配组,如果G1和G3分够了宝石的一半,那剩下的就都是G2和G4的了。

#include<iostream>
#include<algorithm>
#include<sstream>
#include<string>
using namespace std;
typedef long long ll; int T;
int main()
{
cin >> T;
while (T--)
{
ll n;
ll half;
ll sum;
string num;
string ans; cin >> n;
ans.resize(n, ' ');//这个很重要,重新分配了答案字符串的大小,方便分配组
cin >> num; sum = n * (n + 1) / 2;//宝石的总和
if (sum & 1) { cout << -1 << endl; continue; }//如果是奇数就直接输出-1 half = sum / 2;//宝石分一半
for (int i = n; i >= 1; i--){//从后面开始分
if (half <= n && ans[half - 1] == ' '){//half<=n意味着可以直接从中挑人分组了
if (num[half - 1] == '1') {
ans[half - 1] = '3';
}
else {
ans[half - 1] = '1';
}
break;
}
half -= i;//表示已经分配掉这个人了
if (num[i - 1] == '1') {
ans[i - 1] = '3';
}
else{
ans[i - 1] = '1';
}
} for (int i = n; i >=1; i--){
if (ans[i - 1] == ' '){
if (num[i - 1] == '1') {
ans[i - 1] = '4';
}
else {
ans[i - 1] = '2';
}
}
}
cout << ans << endl;
}
return 0;
}

  

浙江省赛 ZOJ - 4033的更多相关文章

  1. CONTINUE...? ZOJ - 4033

    CONTINUE...? ZOJ - 4033 题解:先计算一下总数sum是否是偶数,如果不是则不能分出来,如果是则从后面开始分,先把人分到1.3组,分完sum / 2这些人,如果恰好能够分成零,那么 ...

  2. ZOJ 3879 Capture the Flag 15年浙江省赛K题

    每年省赛必有的一道模拟题,描述都是非常的长,题目都是蛮好写的... sigh... 比赛的时候没有写出这道题目 :( 题意:首先输入4个数,n,q,p,c代表有n个队伍,q个服务器,每支队伍的初始分数 ...

  3. ZOJ 3872 Beauty of Array DP 15年浙江省赛D题

    也是一道比赛时候没有写出来的题目,队友想到了解法不过最后匆匆忙忙没有 A 掉 What a pity... 题意:定义Beauty数是一个序列里所有不相同的数的和,求一个序列所有字序列的Beauty和 ...

  4. ZOJ 3781 - Paint the Grid Reloaded - [DFS连通块缩点建图+BFS求深度][第11届浙江省赛F题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781 Time Limit: 2 Seconds      Me ...

  5. ZOJ 3780 - Paint the Grid Again - [模拟][第11届浙江省赛E题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Time Limit: 2 Seconds      Me ...

  6. ZOJ 3777 - Problem Arrangement - [状压DP][第11届浙江省赛B题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 Time Limit: 2 Seconds      Me ...

  7. 2017浙江省赛 H - Binary Tree Restoring ZOJ - 3965

    地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3965 题目: iven two depth-first-search ...

  8. 2017浙江省赛 E - Seven Segment Display ZOJ - 3962

    地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3962 题目: A seven segment display, or ...

  9. 2017浙江省赛 D - Let's Chat ZOJ - 3961

    地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3961 题目: ACM (ACMers' Chatting Messe ...

随机推荐

  1. UVA - 1647 Computer Transformation(计算机变换)(找规律)

    题意:初始串为一个1,每一步会将每个0改成10,每个1改成01,因此1会依次变成01,1001,01101001,……输入n(n<=1000),统计n步之后得到的串中,"00" ...

  2. Python风格规范分享

    今天给大家分享Python 风格规范,以下代码中 Yes 表示推荐,No 表示不推荐. 分号 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 每行不超过80个字符 以下情况除外: 长的 ...

  3. event recorder 学习手记

    #define EventStopA(slot) EventRecord2 (0xEF20U+EventLevelError+((slot) & 0xFU), ((uint32_t) __FI ...

  4. 判断苹果和安卓端或者wp端

    window.onload = function() { var u = navigator.userAgent; if(u.indexOf('Android') > -1 || u.index ...

  5. 18 12 29 css background

    background属性 属性解释 background属性是css中应用比较多,且比较重要的一个属性,它是负责给盒子设置背景图片和背景颜色的,background是一个复合属性,它可以分解成如下几个 ...

  6. mariabd mysql升级mariadb

    还有错误 [root@localhost /]# mysqldump --all-databases --user=root --password --master-data > backupd ...

  7. MySQL实现免密登录和数据库无法启动问题

    1. 进入MySQL安装的文件夹,打开my.ini配置文件,打开方式参考:https://www.cnblogs.com/leslie12956/p/11842956.html 2. 停止MysSQL ...

  8. python期末考试复习

    期末考试复习 补修的python跟着大一一起学,考试肯定不会出难,于是就敲了一些代码,把他们放到博客上,来记录一下 代码都是一段一段的,且python代码不是很多,所以我都写到了一个文件里,作为练习 ...

  9. 《打造扛得住的MySQL数据库架构》第4章 MySQL数据库结构优化

    4-1 数据库结构优化介绍 良好的数据库逻辑设计和物理设计是数据库获得高性能的基础. 1.减少不必要的数据冗余. 2.尽量避免数据维护中出现更新,插入和删除异常. 插入异常:如果表中的某个实体随着另一 ...

  10. Django2.0——Form组件简单总结

    Django提供了一个Form组件来配和前端的表单进行使用,Form有两个强大的功能,分别是生成HTML代码和验证数据的合法性.通常我们不会用其第一个功能,因为前端的设计可以做出更加精美且多样的表单页 ...