题意:

第一行给出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. ConcurrentHashMap核心源码浅析

    1.引子 并发编程中使用HashMap可能导致程序死循环.因为多线程会put方法添加键值对时将导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为 ...

  2. android 开发学习

    androidSDK自带SQLite数据库,使用时继承父类(SQLiteOpenHelper). this表对象本身,理解为指向自身的指针:super(超类)表对象的父类,即指向父类的指针. Cont ...

  3. 51nod 1006:最长公共子序列Lcs

    1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...

  4. UML概念

    UML UML:Unified Modeling Language是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明,可视化,结构和编写一个正在开发的,面向对象的,软件密集系统的制品开放 ...

  5. 对DataFrame的再理解

    1.构造需要从字典构造 cds={'code':["002372.XSHE","002415.XSHE","002304.XSHE",&qu ...

  6. Mybatis(1)-初识mybaits

    一.概述 1.概述 mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身, 而不需要花费精力去处理加载驱动.创建连接.创建 state ...

  7. Monthly Expense(最大值最小化问题)

                                                                                POJ-3273                 ...

  8. 抓DHCP客户端ip脚本

    cat testnew.sh #!/bin/bash catch_ip (){Ip=`sudo nmap -sP 192.168.1.0/24 |grep -i -B2 $mac|grep Nmap ...

  9. [tensorflow] 线性回归模型实现

    在这一篇博客中大概讲一下用tensorflow如何实现一个简单的线性回归模型,其中就可能涉及到一些tensorflow的基本概念和操作,然后因为我只是入门了点tensorflow,所以我只能对部分代码 ...

  10. zTree & ckeditor &ValidateCode.jar 使用个人心得总结

    zTree:依靠 jQuery 实现的多功能 “树插件”. 使用时只需要将下载的压缩包接用,复制里边的css 和 js 到指定目录即可. 如图所示: 在zTree的官网可以找到各种类型树的示例: 地址 ...