imomoの勉強記録

主に勉強の記録などを残していきます

パナソニックプログラミングコンテスト(ABC195)に参加しました

AtCoderのコンテストに参加した際の結果と考え方、反省点などを書いていきます。
コンテストページはこちら

解いた

A問題

問題の概要

Hは、Mの倍数ですか?

制約
  • 1 \leq M \leq 1000
  • 1 \leq H \leq 1000
  • 入力は全て整数
どのように考えたか

 H mod Mをして、0ならHMの倍数になる

結果

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() {
	int m,h;
	cin >> m >> h;
	if(h%m == 0)cout << "Yes" << endl;
	else cout << "No" << endl;
	return 0;
}

簡単だった

ACまでの時間

ACしたのはコンテスト開始から1分後です。

f:id:iiiimmmmo:20210313231332p:plain
ABC195_A

B問題

問題の概要

Aグラム以上Bグラム以下のミカンが沢山あります。
この中から、ちょうどWキログラムのミカンを選ぶとき、選んだミカンの最小数と最大数を出力してください。
できない場合は、'UNSATISFIABLE'と出力して下さい。

制約
  • 1 \leq A \leq B \leq 1000
  • 1 \leq W \leq 1000
  • 入力は全て整数
どのように考えたか

AグラムのミカンをW以下の最大となるようにミカンを、
BグラムのミカンをW以上の最小となるようにミカンを取る。(それぞれ最小ミカン山、最大ミカン山 個数をAN BNと呼ぶことにする)
最小ミカン山は、WキログラムまでXグラム足りず、最大ミカン山は、WキログラムまでYグラム足りない。

最小ミカン山をWキログラムに近づけるには、選んだミカンをA+1,A+2,A+3,...,Bのミカンに変えて行けば良い。
これを、ANだけ行うことができるので、AN × (B - A)が調整できる最大のグラムとなる。
よって、AN × (B - A)X以上ならAN個のミカンを取ることが可能。
最大ミカン山でも同じことがいえる

AN個とBNを取ることが可能ならそのまま出力、どちらかできない場合は'UNSATISFIABLE'と出力する。

結果

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() {
	int a,b,w,l,r,dur;
	cin >> a >> b >> w;
	dur = b-a;
	w *= 1000;
	l = w/a;
	r = (w+b-1)/b;
	if((dur * l) < (w - (l * a)) || (dur * r) < ((r * b) - w))cout << "UNSATISFIABLE" << endl;
	else cout << r << " " << l << endl;
	// cout << l << " " << r;
	return 0;
}

少し難しかった・・・

ACまでの時間

ACしたのはコンテスト開始から24分後です。

f:id:iiiimmmmo:20210313231351p:plain
ABC195_B

結果

コンテスト結果

ABの2完でした。
2完は久しぶりなので、とても悔しいです。

f:id:iiiimmmmo:20210313231408p:plain
ABC195

パフォーマンス、レーティング変動

今回のパフォーマンスは311、前回より300近く下がってしまいました。
レーティングはそれに伴い-33の650となりました。

f:id:iiiimmmmo:20210313231451p:plain
コンテスト成績表
f:id:iiiimmmmo:20210313231503p:plain
ABC195を終えた時点でのレーティング

最近下がってしかいないですね・・・

反省点

今回はC問題で詰まって、解けなかったのでDを解いてみたが解けなかったのでこのような結果になってしまいました。
C問題に関しては自分の実装ミスだと思うので気を引き締めていきたいです。