出場はしてない
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;
}
https://atcoder.jp/contests/abc137/submissions/7047537