AtCoder Beginner Contest 160
签到,判断形如caffee一样的单词,34字母相同,56字母相同
#include<iostream> #include<cstdio> #include<string> #include<cstring> using namespace std; int main() { string s; cin >> s; if (s.length() == 6 && s[2] == s[3] && s[4] == s[5]) cout << "Yes\n"; else cout << "No\n"; return 0; }
贪心,能用500换1000的幸福点,就用500,剩下的用5换5
#include <iostream> #include <cstdio> #pragma warning(disable:4996) using namespace std; int main() { int n; scanf("%d", &n); long long ans = 0; int k1 = n / 500; ans += k1 * 1000; n %= 500; ans += 5 * (n / 5); printf("%lld", ans); return 0; }
C - Traveling Salesman around Lake
题意
长度为k的圆上有n个房子,求经过每个房子需要走的最短路径
思路
求出相邻房子之间距离的最大值,注意第n号房子与第1号房子距离的计算,然后用k-max_dist
代码
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N = 2e5 + 5; int a[N]; int main() { int k, n; cin >> k >> n; for (int i = 1; i <= n; ++i) cin >> a[i]; sort(a + 1, a + n + 1); int res = 0; for (int i = 2; i <= n; ++i) res = max(res, a[i] - a[i - 1]); res = max(k - a[n] + a[1], res); cout << k - res << endl; system("pause"); return 0; }
D:Line++
题意:
n个点,每个点与他前一个点相连,给出不相邻两点X,Y他们之间连也一条边
思路:
n个点,每个点与他前一个点相连,给出不相邻两点X,Y他们之间连也一条边
思路:
暴力计算两点之间的距离,未加入点前 i , j 两点距离为 j - i
加X,Y后,更新i,j两点的距离,dis[i][j] = min(dis[i][x] + dis[y][j] +1,dis[i][j]);
最后统计相同路径长的数量
代码:
#include<iostream> #include<algorithm> using namespace std; const int N = 2e3 + 5; int e[N][N], ans[N]; int main() { int n, x, y; cin >> n >> x >> y; for (int i = 1; i <= n; ++i) { for (int j = i + 1; j <= n; ++j) { e[j][i] = e[i][j] = j - i; } } for (int i = 1; i <= n; ++i) { for (int j = i + 1; j <= n; ++j) { e[i][j] = e[j][i] = min(e[i][x] + e[y][j] + 1, e[i][j]); } } for (int i = 1; i <= n; ++i) for (int j = i + 1; j <= n; ++j) ans[e[i][j]]++; for (int i = 1; i < n; ++i) cout << ans[i] << endl; system("pause"); return 0; }
题目:
红苹果,绿苹果各A,B个,每个苹果对应有自己的美味值,还有C个无色苹果,可以变成红苹果或绿苹果,求吃X个红苹果,Y个绿苹果的最大美味值。
思路:
贪心。这是什么三指针??我好像没学。瞎写一下
A,B,C苹果排个序,取前X,Y个红苹果和绿苹果,用无色苹果的当前最大值(比如第k个无色苹果最大)比较A,B种最小的值(设为红色第i个,绿色第j个最小),如果c[k]>a[i],c[k]>b[j],则c[k]替换掉a[i],b[j]种较小的那个,因为假设a[i]<b[j]那么替换后增加的美味值为c[k]-a[i]>c[k]-b[j]。
代码:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; typedef long long ll; const int N = 1e5 + 5; int a[N], b[N], c[N]; int x, y, A, B, C; bool mycmp(int x, int y) { return x > y; } int main() { cin >> x >> y >> A >> B >> C; for (int i = 1; i <= A; ++i) cin >> a[i]; for (int i = 1; i <= B; ++i) cin >> b[i]; for (int i = 1; i <= C; ++i) cin >> c[i]; sort(a + 1, a + A + 1, mycmp); sort(b + 1, b + B + 1, mycmp); sort(c + 1, c + C + 1, mycmp); int Amin = x, Bmin = y, Cmax = 1; while (Cmax <= C && Amin >= 1 && Bmin >= 1) { int am = a[Amin], bm = b[Bmin], cmx = c[Cmax]; if ( am <= cmx && bm <= cmx ) { if (a[Amin] <= b[Bmin]) { a[Amin] = cmx; Amin--; Cmax++; } else { b[Bmin] = cmx; Bmin--; Cmax++; } } else if (am <= cmx) { a[Amin] = cmx; Amin--; Cmax++; } else if (bm <= cmx) { b[Bmin] = cmx; Bmin--; Cmax++; } else { break; } } ll res = 0; for (int i = 1; i <= x; ++i) res += a[i]; for (int i = 1; i <= y; ++i) res += b[i]; cout << res << endl; return 0; }

谁能告诉我为啥第七个点WA了
本文来自博客园,作者:xiongyuqing,转载请注明原文链接:https://www.cnblogs.com/xiongyuqing/p/12591643.html

浙公网安备 33010602011771号