CF831C Jury Marks

思路:

关键在于“插入”一个得分之后,其他所有得分也随之确定了。

实现:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <set>
 4 using namespace std;
 5 const int MAXN = 2005;
 6 int a[MAXN], b[MAXN], sum[MAXN];
 7 int main()
 8 {
 9     int k, n;
10     set<int> ans;
11     cin >> k >> n;
12     for (int i = 1; i <= k; i++)
13     {
14         cin >> a[i];
15         sum[i] = sum[i - 1] + a[i];
16     }
17     for (int i = 1; i <= n; i++) cin >> b[i];
18     for (int i = 1; i <= k; i++)
19     {
20         set<int> s;
21         for (int j = 1; j <= k; j++)
22         {
23             if (i == j) continue;
24             s.insert(b[1] - (sum[i] - sum[j]));
25         }
26         bool flg = true;
27         for (int j = 2; j <= n; j++)
28         {
29             if (!s.count(b[j])) { flg = false; break; }
30         }
31         if (flg) ans.insert(b[1] - sum[i]);
32     }
33     cout << ans.size() << endl;
34     return 0;
35 }
时间: 2024-11-05 21:45:14

CF831C Jury Marks的相关文章

Codeforces Round #424 (Div. 2) C. Jury Marks(乱搞)

题目链接:Codeforces Round #424 (Div. 2) C. Jury Marks 题意: 给你一个有n个数序列,现在让你确定一个x,使得x通过挨着加这个序列的每一个数能出现所有给出的k个数. 问合法的x有多少个.题目保证这k个数完全不同. 题解: 显然,要将这n个数求一下前缀和,并且排一下序,这样,能出现的数就可以表示为x+a,x+b,x+c了. 这里 x+a,x+b,x+c是递增的.这里我把这个序列叫做A序列 然后对于给出的k个数,我们也排一下序,这里我把它叫做B序列,如果我

CodeForces - 831C Jury marks

Polycarp watched TV-show where k jury members one by one rated a participant by adding him a certain number of points (may be negative, i. e. points were subtracted). Initially the participant had some score, and each the marks were one by one added

Codeforces Round #424 (Div. 2) A-C

A. Unimodal Array 水题 #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace

Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals)

D题fst了,生无可恋.第二场rated的CF,打得精神恍惚 A. Unimodal Array 题意:判断数列是否是单峰的. 像题意那样分为三个阶段随便判一判就好了 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; int n,x[105],part=1; bool f=1; int main() { scanf(&quo

CF Round433 B. Jury Meeting

题目链接:http://codeforces.com/problemset/problem/853/B 题目大意:自己看吧... 解题思路:刚开始看题解也没看明白,搞了一下午.最后一句话给看到一句话: 排序后前缀最小花费,后缀最小花费,扫一遍就OK了. 具体过程:按照day排序之后,记录前缀最小花费以及对应的最大day,记录后缀最小花费以及对应最小day,然后用双指针对前缀的每一个查找后缀中满足条件的,更新ans即可. 对于前缀,如果j > i, 则 prefix(j) <= prefix(i

POJ 1015 Jury Compromise(dp坑)

提议:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团.选m人的办法是:控方和辩方会根据对候选人的喜欢程度,给所有候选人打分,分值从0到20.为了公平起见,法官选出陪审团的原则是:选出的m个人,必须满足辩方总分和控方总分的差的绝对值最小.如果有多种选择方案的辩方总分和控方总分的之差的绝对值相同,那么选辩控双方总分之和最大的方案即可. 题解:开始想到的是二维01背包,因为评价差的总分值最大可能

POJ 1015 Jury Compromise 2个月后重做,其实这是背包题目

http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团.选m人的办法是:控方和辩方会根据对候选人的喜欢程度,给所有候选人打分,分值从0到20.为了公平起见,法官选出陪审团的原则是:选出的m个人,必须满足辩方总分和控方总分的差的绝对值最小.如果有多种选择方案的辩方总分和控方总分的之差的绝对值相同,那么选辩控双方总分之和最大的方案

图论(网络流):SPOJ OPTM - Optimal Marks

OPTM - Optimal Marks You are given an undirected graph G(V, E). Each vertex has a mark which is an integer from the range [0..231 – 1]. Different vertexes may have the same mark. For an edge (u, v), we define Cost(u, v) = mark[u] xor mark[v]. Now we

【BZOJ-2400】Spoj839Optimal Marks 最小割 + DFS

2400: Spoj 839 Optimal Marks Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 567  Solved: 202[Submit][Status][Discuss] Description 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. 给你一个有n个结点m条边的无向图.其中的一些点的值是给定的,而其余的点的值由你决定(但要求均为非负数),使得这个无向图的值最小