出場はしてない
A. +-x
問題文の通りに最大値を出力する.
#include <algorithm> #include <cmath> #include <cstdio> #include <iomanip> #include <iostream> #include <map> #include <queue> #include <sstream> #include <string> using namespace std; void solve(int a, int b) { printf("%d\n", max({a + b, a - b, a * b})); } int main() { int a, b; cin >> a >> b; solve(a, b); return 0; }
https://atcoder.jp/contests/abc137/submissions/7038126
B
範囲に気を付けて,x - k + 1
から x + k - 1
を出力する
#include <algorithm> #include <cmath> #include <cstdio> #include <iomanip> #include <iostream> #include <map> #include <queue> #include <sstream> #include <string> using namespace std; void solve(int k, int x) { int l, r; l = max(-1000000, x - k + 1); r = min(1000000, x + k - 1); for (int i = l; i < r; i++) { printf("%d ", i); } printf("%d\n", r); } int main() { int k, x; cin >> k >> x; solve(k, x); return 0; }
https://atcoder.jp/contests/abc137/submissions/7038666
C
アナグラム判定はsortでやって,同じものがいくつあるかを数えて,それぞれについて を全部足す.
一回 int
にしていて WAになった.
#include <algorithm> #include <cmath> #include <cstdio> #include <iomanip> #include <iostream> #include <map> #include <queue> #include <sstream> #include <string> using namespace std; void solve(map<string, long long> m) { long long ans = 0; for (auto item : m) { ans += item.second * (item.second - 1) / 2; } printf("%lld\n", ans); } int main() { int n; cin >> n; map<string, long long> m; for (int i = 0; i < n; i++) { string s; cin >> s; sort(s.begin(), s.end()); m[s] += 1; } solve(m); return 0; }
https://atcoder.jp/contests/abc137/submissions/7038666
D
最終日からさかのぼって処理する. 残り日数以下の仕事をque に全部入れて,報酬が最大のものを取り出す,ということをやっていく.
#include <algorithm> #include <cmath> #include <cstdio> #include <iomanip> #include <iostream> #include <map> #include <queue> #include <sstream> #include <string> using namespace std; typedef struct { int A; int B; } Job; bool comp(const Job &a, const Job &b) { return a.A < b.A; } void solve(int N, int M, vector<Job> jobs) { priority_queue<int> que; int ans = 0; int i = 0; for (int m = 0; m <= M; m++) { while (jobs[i].A <= m && i < N) { que.push(jobs[i].B); i++; } if (!que.empty()) { int b = que.top(); que.pop(); ans += b; } } printf("%d\n", ans); } int main() { int N, M; cin >> N >> M; vector<Job> jobs(N); for (int i = 0; i < N; i++) { int A, B; cin >> A >> B; Job job = {A, B}; jobs[i] = job; } sort(jobs.begin(), jobs.end(), comp); solve(N, M, jobs); return 0; }