标签:acm codeforces
题目传送:Codeforces Round #303 (Div. 2)
这场题目比较简单,就最后一个题要好好想想
A. Toy Cars
思路:水
AC代码:
#include <cstdio> #include <cstring> #include <string> #include <cstdlib> #include <iostream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> #include <map> #include <set> #include <deque> #include <cctype> #define LL long long #define INF 0x7fffffff using namespace std; int a[105]; int cnt; int main() { int n; scanf("%d", &n); cnt = 0; for(int i = 0; i < n; i ++) { int flag = 1; for(int j = 0; j < n; j ++) { int t; scanf("%d", &t); if(t == 1 || t == 3) flag = 0; } if(flag) a[cnt ++] = i + 1; } printf("%d\n", cnt); for(int i = 0; i < cnt; i ++) { printf("%d ", a[i]); } return 0; }
B. Equidistant String
题意:找一个字符串,使得他与给出的两个字符串的“距离相同”。具体做法看代码。
AC代码:
#include <cstdio> #include <cstring> #include <string> #include <cstdlib> #include <iostream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> #include <map> #include <set> #include <deque> #include <cctype> #define LL long long #define INF 0x7fffffff using namespace std; char s1[100005], s2[100005]; int main() { scanf("%s %s", s1, s2); int len = strlen(s1); int cnt = 0; for(int i = 0; i < len; i ++) { if(s1[i] != s2[i]) cnt ++; } if(cnt & 1) { printf("impossible\n"); } else { int m = cnt / 2; for(int i = 0; i < len; i ++) { if(s1[i] != s2[i]) { if(s1[i] == '1') s1[i] = '0'; else s1[i] = '1'; m --; } if(m == 0) break; } printf("%s\n", s1); } return 0; }
C. Woodcutters
思路:砍树,尽量砍得最多,贪心,尽量往左边砍。
AC代码:
#include <cstdio> #include <cstring> #include <string> #include <cstdlib> #include <iostream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> #include <map> #include <set> #include <deque> #include <cctype> #define LL long long #define INF 0x7fffffff using namespace std; const int maxn = 100005; int x[maxn], h[maxn]; int main() { int n; scanf("%d", &n); for(int i = 0; i < n; i ++) { scanf("%d %d", &x[i], &h[i]); } int ans = 1; int cur = -INF; for(int i = 0; i < n - 1; i ++) { if(i == 0) { ans ++; cur = x[i]; } else if(x[i] - h[i] > cur && x[i] - h[i] > x[i - 1]) { ans ++; cur = x[i]; } else if(x[i] > cur && x[i] + h[i] < x[i + 1]) { ans ++; cur = x[i] + h[i]; } } printf("%d\n", ans); return 0; }
D. Queue
思路:排下序然后贪心一下就ok了。
AC代码:
#include <cstdio> #include <cstring> #include <string> #include <cstdlib> #include <iostream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> #include <map> #include <set> #include <deque> #include <cctype> #define LL long long #define INF 0x7fffffff using namespace std; int a[100005]; int main() { int n; scanf("%d", &n); for(int i = 0; i < n; i ++) { scanf("%d", &a[i]); } sort(a, a + n); LL ans = 1; LL sum = a[0]; for(int i = 1; i < n; i ++) { if(a[i] >= sum) { ans ++; sum += a[i]; //cout << sum << endl; } } cout << ans << endl; return 0; }
E. Paths and Trees
待补...
Codeforces Round #303 (Div. 2)
标签:acm codeforces
原文地址:http://blog.csdn.net/u014355480/article/details/45877649