Codeforces Round #248 (Div. 2)
2014-05-24 19:19
330 查看
题目链接:CF248|DIV2
C题题意理解错误, 各种WA。。
A:简单题。 我是直接用背包做的, 不用DP更简单, 简单判断一下200的个数的奇偶性,分类讨论即可。
B:简单题, 给出一个数组a, 给出l,r,分别求排序前后sigma(a[i]) (l <= i <= r), 预处理下和就行。
C:也是较为简单的题目。 题目的意思是给出一些数字ai, 定义:s=
.然后可以将其中所有的x换成y,
求变换之后最小的s.
先将每个数相邻的数字加入自己的集合。 如何使差的绝对值最小? 这里使用了贪心, 只要将当前的数变成集合所有数的中位数就行了。
D,E还没看。
C题题意理解错误, 各种WA。。
A:简单题。 我是直接用背包做的, 不用DP更简单, 简单判断一下200的个数的奇偶性,分类讨论即可。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; const int N = 20010; int dp ; int a[110]; int main(){ int n; scanf("%d", &n); int v = 0; for(int i = 0; i < n; ++i){ scanf("%d", &a[i]); v += a[i]; } v >>= 1; dp[0] = 1; for(int i = 0; i < n; ++i){ for(int j = v; j >= a[i]; --j){ if(dp[j - a[i]]) dp[j] = 1; } } if(dp[v]) printf("YES\n"); else printf("NO\n"); return 0; }
B:简单题, 给出一个数组a, 给出l,r,分别求排序前后sigma(a[i]) (l <= i <= r), 预处理下和就行。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; const int N = 1e5 + 10; LL a ; LL sum , s ; int main(){ int n, m; scanf("%d", &n); for(int i = 1; i <= n; ++i){ scanf("%I64d", &a[i]); sum[i] = sum[i - 1] + a[i]; } sort(a + 1, a + 1 + n); for(int i = 1; i <= n; ++i) s[i] = s[i-1] + a[i]; scanf("%d", &m); for(int i = 1; i <= m; ++i){ int op, l, r; scanf("%d%d%d", &op, &l, &r); if(op == 1){ printf("%I64d\n", sum[r] - sum[l - 1]); } else printf("%I64d\n", s[r] - s[l - 1]); } return 0; }
C:也是较为简单的题目。 题目的意思是给出一些数字ai, 定义:s=
.然后可以将其中所有的x换成y,
求变换之后最小的s.
先将每个数相邻的数字加入自己的集合。 如何使差的绝对值最小? 这里使用了贪心, 只要将当前的数变成集合所有数的中位数就行了。
#include <cstdio> #include <cstring> #include <vector> #include <algorithm> #define pb push_back using namespace std; typedef long long LL; const int N = 1e5 + 10; int n, m; int a ; vector<int> b ; int main() { scanf("%d%d", &n, &m); for (int i = 0; i < m; ++i) { scanf("%d", &a[i]); if (i > 0 && a[i] != a[i - 1]) { b[a[i]].pb(a[i - 1]); b[a[i - 1]].pb(a[i]); } } LL sum = 0; for (int i = 1; i < m; ++i) { sum += abs(a[i] - a[i - 1]); } LL ans = sum; for (int it = 1; it <= n; ++it) { vector<int> vec = b[it]; if (vec.empty()) continue; sort(vec.begin(), vec.end()); int x = vec[vec.size() / 2]; // if(x > n) x = n; LL ret = sum; for (int i = 0; i < vec.size(); ++i) { ret += abs(vec[i] - x) - abs(vec[i] - it); } ans = min(ans, ret); } printf("%I64d\n", ans); }
D,E还没看。
相关文章推荐
- Codeforces Round #248 (Div. 2) B称号 【数据结构:树状数组】
- Codeforces Round #248 (Div. 2) —— B
- Codeforces Round #248 (Div. 2) C - Ryouko's Memory Note
- Codeforces Round #248 (Div. 2) C. Ryouko's Memory Note
- Codeforces Round #248 (Div. 2) C. Ryouko's Memory Note
- Codeforces Round #364 (Div. 2)(A,B,C,D)
- Codeforces Round #411 (Div. 2) D. Minimum number of steps
- Codeforces Round #142 (Div. 2)
- Codeforces Round #396(Div. 2)C. Mahmoud and a Message【dp】
- Codeforces Round #299 (Div. 1) A. Tavas and Karafs(二分)
- Codeforces Round #244 (Div. 2)
- Codeforces Round #101 (Div. 2) A题
- Codeforces Round #FF (Div. 2):B. DZY Loves Strings
- Codeforces Round #FF(255) DIV2
- Codeforces Round #166 (Div. 2)
- Codeforces Round #FF (Div. 2)C.DYZ Loves Sequence
- Codeforces Round #FF (Div. 二):C. DZY Loves Sequences
- Codeforces Round #364 (Div. 2) C. They Are Everywhere(stl+乱搞)
- Codeforces Round #313 (Div. 1) Gerald's Hexagon
- Codeforces Round #190 (Div. 2)