Codeforces1323-C:Unusual Competitions

2020-07-12 做题

传送门 题目大意 如果通过插入 "+"和 "1 "可以从中得到一个形式完整的数学表达式,那么一个带括号的序列 就被称为正确。例如,"(())()"、"() "和"(()())) "等序列是正确的,而")("、"(()) "和"(()))("则不正确。 老师给德米特里的班级布置了一个非常奇怪的任务:她要求每个学生想出一个任意长度的序 列,只由开头和结尾的括号组成。之后,所有学生轮流说出自己想出的序列。轮到迪马时,他突然发现,所有同学都得到了正确的括号序列,而他是否得到了正确的括号序列,他不知道。 迪马现在怀疑自己只是漏掉了任务书中的 "正确 "二字,所以现在他想通过稍微修改自己的序 列来挽救局面。更准确地说,他可以任意次数(可能是零)地执行重排序操作。 重排序操作包括选择序列中任意一个连续的子串,然后以任意的方式对其中的所有字符进行重 排序。这种操作需要l纳秒,其中l是被重新排序的子段的长度。很容易看出,重新排序操作并 不会改变开括号和收括号的数量。例如对于"))((",他可以选择子串")(",然后进行重排 序")()("(这个操作需要2纳秒)。 由于Dima很快就要回答,他想尽快让自己的序列正确。帮助他做到这一点,或者确定这是不可能的。 输入输出 输入 第一行包含一个整数n(1≤n≤10e6)表示序列的长度。 第二行包含长度为n的字符串,仅由字符"("和") "组成。 输出 打印一个整数:使序列正确的最小纳秒数,如果不可能做到,则打印"-1"。 难度不大的栈括号,遇到左括号就压进去,右括号弹,如果栈不空就输出-1,否则输出答案。 ```cpp #include using namespace std; typedef long long ll; …

阅读全文 →

Codeforce1323-B

2020-07-12 做题

传送门 ```cpp #include typedef long long ll; using namespace std; const int LIM = 100010; ll ans = 0; int n, m, k, p = 0;; int a[LIM]; int b[LIM]; int c[LIM]; int main() { cin >> n >> m >> k; for ( …

阅读全文 →

Codeforce1348-A:Phoenix and Balance

2020-07-11 做题

题目大意:有n(n一定是偶数)堆硬币,他们的重量依次是21,22,...,2n。现在需要把他们分成两份,并让这两份硬币总质量之差的绝对值尽可能的小,请找到这个方案并输出质量之差的绝对值作为答案。 分法不难想, 将重量为2n的给第一份,重量为2n-1~2n-n/2-1的部分给第二份,剩下的再分给第一份。 原因很简单,2~ 2n 中 2n 大于其他n-1个数之和,所以先把 2n 拉出来单独放一堆,然后让另一堆的值尽可能大就行了。 观察答案: n=2,ans=2n=4,ans=6n=6,ans=14n=12,ans=30...... 不难得出上一个数*2+2就是下一个答案。 ```cpp #include using namespace std; typedef long long ll; int main() { int t; cin >> t; while(t--) { int n; cin >> n; ll k = 0; for(int i = 2; i <= …

阅读全文 →