キャディプログラミングコンテスト2021(ABC193)に参加しました
AtCoderのコンテストに参加した際の結果と考え方、反省点などを書いていきます。
コンテストページはこちら
解いた/挑んだ問題
A問題
問題の概要
定価円の商品が円で売られているとき、この商品の売値は定価の何パーセント引きですか?
制約
- は整数
どのように考えたか
はの何パーセントかを求め、100から引いた
結果
1発AC
・提出したコード
#include<bits/stdc++.h> #include<atcoder/all> #define rep(i, n) for (long long i = 0; i < (long long)(n); i++) #define REP(i,v,n) for(long long i = v; i <= (long long)(n); i++) #define rrep(i,n) for(long long i = n;0 <= (long long)(i); i--) #define RREP(i,n,v) for(long long i = n;v <= (long long)(i); i--) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } using namespace std; using namespace atcoder; using ll = long long; using pi = pair<int, int>; ll pows(ll x, ll n) {ll ret = 1;while (n > 0) {if (n & 1) ret *= x;x *= x;n >>= 1;}return ret;} int main() { double a,b; cin >>a >> b; //小数点以下の精度を求められる時 cout << fixed << setprecision(12); cout << 100.0 - (b/a *100 )<< endl; return 0; }
最初、定価の何パーセントですか に見えたので答えが合わなくて焦った
ACまでの時間
ACしたのはコンテスト開始から3分後です。
B問題
問題の概要
高橋君はゲーム機が欲しいです。
ゲーム機は店の軒あり、店は高橋君の現在地から徒歩で分、ゲーム機の販売価格は円、現在の在庫は個です
ゲーム機は人気なので、今から分後に台売れます。
高橋君はゲーム機を買うことができますか?できる場合は買うのに必要な最小金額を求めてください。
制約
- 入力は全て整数
どのように考えたか
分経過すれば個、分経過すれば個のように、分経過すれば個売れるので、高橋君が各店に行くまでにかかる時間分、店の在庫から引く。
そのあと、すべての店に対して、在庫が1以上なら、購入し最小金額を求める。
結果
1発AC
提出したコード
#include<bits/stdc++.h> #include<atcoder/all> #define rep(i, n) for (long long i = 0; i < (long long)(n); i++) #define REP(i,v,n) for(long long i = v; i <= (long long)(n); i++) #define rrep(i,n) for(long long i = n;0 <= (long long)(i); i--) #define RREP(i,n,v) for(long long i = n;v <= (long long)(i); i--) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } using namespace std; using namespace atcoder; using ll = long long; using pi = pair<int, int>; ll pows(ll x, ll n) {ll ret = 1;while (n > 0) {if (n & 1) ret *= x;x *= x;n >>= 1;}return ret;} int main() { ll n,ans = 1001001001; cin >> n; vector<ll>a(n),p(n),x(n); rep(i,n)cin >> a[i] >> p[i] >> x[i]; rep(i,n){ x[i] -= a[i]; if(0 < x[i])chmin(ans,p[i]); } if(ans == 1001001001)ans = -1; cout << ans << endl; return 0; }
落ち着いて考えれば簡単だった
ACまでの時間
ACしたのはコンテスト開始から7分後です。
C問題
問題の概要
整数が与えられます。以上以下の整数のうち、以上の整数を用いてと表せないものはいくつあるでしょうか
制約
- は整数
どのように考えたか
指数に最低でもを用いる必要があるので、を超えないようから、まで探索する
なので十分計算量は小さいことがわかる
結果
1発AC
・提出したコード
#include<bits/stdc++.h> #include<atcoder/all> #define rep(i, n) for (long long i = 0; i < (long long)(n); i++) #define REP(i,v,n) for(long long i = v; i <= (long long)(n); i++) #define rrep(i,n) for(long long i = n;0 <= (long long)(i); i--) #define RREP(i,n,v) for(long long i = n;v <= (long long)(i); i--) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } using namespace std; using namespace atcoder; using ll = long long; using pi = pair<int, int>; ll pows(ll x, ll n) {ll ret = 1;while (n > 0) {if (n & 1) ret *= x;x *= x;n >>= 1;}return ret;} int main() { ll N,n; set<ll>se; cin >> N; if(N < 4){ cout << N << endl; return 0; }else{ n = floor(sqrt(N)); REP(i,2,n){ ll tmp = i; while(tmp < N){ tmp *= i; if(tmp <= N)se.insert(tmp); } } } cout << N - se.size() << endl; return 0; }
オーバーフローしないのにオーバーフローすると勘違いして時間を溶かしました・・・
ACまでの時間
ACしたのはコンテスト開始から73分後。
結果
コンテスト結果
ABCの3完でした。
C問題で無限に時間を使ってしまいました
パフォーマンス、レーティング変動
今回のパフォーマンスは561、前回より50も下がってしまいました。
レーティングはそれに伴い-13の688となりました。
反省点
今回はC問題で勘違いやミスを連発し、D問題を解ききることができませんでした(D問題はコンテスト終了後4分後に通りました)
ここ最近結果が芳しくなく、挽回してやろうという気持ちから焦りが生まれこのような結果につながったんだと考えています。
自分の本来の実力を出せるように今後鍛えていきたいです。