ABC 008
A問題
#include <bits/stdc++.h> #define REP(i,n) for(int i=0; i<(int)(n); ++i) #define RREP(i,n) for(int i=(int)(n); i>=0; --i) #define FOR(i,k,n) for(int i=(k);i<(int)(n);++i) typedef long long int ll; using namespace std; int main(void) { int S, T; cin >> S >> T; cout << T-S+1 << endl; }
Submission #1025991 - AtCoder Beginner Contest 008 | AtCoder
B問題
#include <bits/stdc++.h> #define REP(i,n) for(int i=0; i<(int)(n); ++i) #define RREP(i,n) for(int i=(int)(n); i>=0; --i) #define FOR(i,k,n) for(int i=(k);i<(int)(n);++i) typedef long long int ll; using namespace std; int main(void) { int N; cin >> N; map<string, int> S; REP(i, N) { string s; cin >> s; S[s]++; } string name; int ans = 0; for(map<string, int>::iterator it = S.begin(); it != S.end(); ++it) { if(it->second > ans) { ans = it->second; name = it->first; } } cout << name << endl; }
Submission #1026002 - AtCoder Beginner Contest 008 | AtCoder
C問題
C問題とは思えない難易度。解説を見てその通りに実装した
#include <bits/stdc++.h> #define REP(i,n) for(int i=0; i<(int)(n); ++i) #define RREP(i,n) for(int i=(int)(n); i>=0; --i) #define FOR(i,k,n) for(int i=(k);i<(int)(n);++i) typedef long long int ll; using namespace std; int main(void) { int N; cin >> N; vector<int> C(N); REP(i, N) cin >> C[i]; double ans = 0; REP(i, N) { int S = 0; REP(j, N) { if(i != j && C[i] % C[j] == 0) S++; } if(S%2 == 1) ans += 0.5; else ans += double(S+2.0)/(2.0*S+2.0); } printf("%.10f\n", ans); }
Submission #1030429 - AtCoder Beginner Contest 008 | AtCoder
D問題
領域内にある採掘機全てについて、「その採掘機で取れる金塊+残りの長方形4つについての最大金塊数」の最大値を求める関数を作ってメモ化再帰。 座標圧縮のためにtupleを使った。
#include <bits/stdc++.h> #include <tuple> #define REP(i,n) for(int i=0; i<(int)(n); ++i) #define RREP(i,n) for(int i=(int)(n); i>=0; --i) #define FOR(i,k,n) for(int i=(k);i<(int)(n);++i) typedef long long int ll; using namespace std; int W, H; int N; int X[81], Y[81]; typedef tuple<int, int, int, int> T; map<T, int> c; int dp(int i, int j, int w, int h) { T t = make_tuple(i, j, w, h); if(c.count(t) == 1) return c[t]; int ret = 0; REP(k, N) { int s = X[k]; int t = Y[k]; if(s >= i && s <= w && t >= j && t <= h) { ret = max(ret, w+h-i-j+1 + dp(i, j, s-1, t-1) + dp(s+1, j, w, t-1) + dp(i, t+1, s-1, h) + dp(s+1, t+1, w, h)); } } return (c[t] = ret); } int main(void) { cin >> W >> H; cin >> N; REP(i, N) cin >> X[i] >> Y[i]; cout << dp(1, 1, W, H) << endl; }
Submission #1033456 - AtCoder Beginner Contest 008 | AtCoder