题意:

第一行给出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. 通过Navicat Premium 实现Oracle的连接和基本操作

    一.Oracle的连接 以下为Navicat Premium连接Oracle数据库的教程 一.需要准备的软件(下载适合自己系统的软件) 1.Navicat premium 官方下载地址:http:// ...

  2. UVA - 1605 Building for UN (联合国大楼)

    题意:一个联合国大楼每层都有数量相等大小相同的格子,将其分配给n个国家,使任意两个不同的国家都相邻(同层有公共边或相邻层的同一个格子). 分析:可以设计一个只有两层的大楼,第一层每个国家占一行,第二层 ...

  3. HDU 5480:Conturbatio 前缀和

    Conturbatio Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tota ...

  4. Express ~ 获取表单 get 和 post 提交方式传送参数的对比

      一,获取 get 提交的参数   var id = req.query.id || ''   二,获取 post 提交的参数 var name = req.body.name || ''

  5. java使用mongoTemplate去重排序查询

    import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.c ...

  6. 移动端主页内容 part4 axios

    ajax  可以动态获取数据内容 vue中发送ajax有很多工具可用 浏览器自带的fetch 现在推荐: axios第三方模块(vue中发送ajax) 特点: 跨平台的数据请求 浏览器中xhr请求 n ...

  7. 1.6判断类型toString.call()

    之前我都是使用typeof,后来发现它的判断有局限,例如(){}obeject.p.toString.call()解决了 obj.toString()的结果和Object.prototype.toSt ...

  8. 网格视图GridView

    1.常用属性 2.Adapter接口 3.Demo演示 今天观看了GridView的相关视频,并且根据案例,进行了代码的编写和实例 新建GridViewActivity.java继承AppCompat ...

  9. VMware Workstation 12 PRo密钥

    注意:手动输入(起初复制输入,一个都没成功,不要偷懒哦) VMware Workstation 12序列号: 5A02H-AU243-TZJ49-GTC7K-3C61N

  10. Python时间问题

    获取当前的时间,time只能精确到秒,而datetime可以精确到毫秒,所以使用格式化的时候要注意. nowTime=time.localtime((time.time())) t=time.strf ...