はい。
AtCoder Beginner Contest 241(Sponsored by Panasonic)
久しぶりに新しい回で遊んだら要求水準が上がっててうおおおおおとなった。。
新しい回から遊ぶのは無謀だなとなったので1回から登っていこうかなと思います。
どうせ忘れっぽくて古い回とかまともに覚えてないので。
コードの中で解法と関係ない箇所とか整形するの止めようかなと。時間かかるけどあんま意味のない作業なので。
ぼちぼち頑張っていきたいです。
A - Digit Machine
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++i)
#define per(i,n) for(int i=n-1;i>=0;--i)
#define sc1(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d %d",&a,&b)
#define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c)
#define sl1(a) scanf("%lld",&a)
#define sl2(a,b) scanf("%lld %lld",&a,&b)
#define sl3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c)
#define PI 3.1415926535897932
#define ll long long
#define print(a) cout << a << endl
int souwa(int a) {return (1+a)*a/2;}
int lcm(int a,int b) { return a*b/__gcd(a,b); }
bool sankaku(int a,int b,int c) {vector <int> t={a,b,c};sort(t.begin(),t.end()); return t.at(0)+t.at(1)>t.at(2);};
int main(){
int n,m,x,y,cnt=0,ans=0;
vector<int> a(10);
rep(i,10) cin >> a.at(i);
ans=a.at(ans);
ans=a.at(ans);
ans=a.at(ans);
print(ans);
return 0;
}
0が表示されている = 0番目から開始 を理解するのに結構時間が必要だった。0番目から開始して表示されている数番目に移動を3回かな。
B - Pasta
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++i)
#define per(i,n) for(int i=n-1;i>=0;--i)
#define sc1(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d %d",&a,&b)
#define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c)
#define sl1(a) scanf("%lld",&a)
#define sl2(a,b) scanf("%lld %lld",&a,&b)
#define sl3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c)
#define PI 3.1415926535897932
#define ll long long
#define print(a) cout << a << endl
int souwa(int a) {return (1+a)*a/2;}
int lcm(int a,int b) { return a*b/__gcd(a,b); }
bool sankaku(int a,int b,int c) {vector <int> t={a,b,c};sort(t.begin(),t.end()); return t.at(0)+t.at(1)>t.at(2);};
int main(){
int mod=1000000007;
int n,m,x,y,cnt=0,ans=0;
string s,t;
cin >> n >> m;
map<int, int> a;
map<int, int> b;
rep(i,n) {
cin >> x;
a[x]++;
}
rep(i,m) {
cin >> x;
b[x]++;
}
for(auto itr=b.begin();itr!=b.end();itr++){
if(itr->second > a[itr->first]) ans=1;
}
if (ans==0) cout << "Yes" << endl;
else cout << "No" << endl;
return 0;
}
そういえば配列2つ使う必要なかったですね。麵のストックを配列で持ってから日々の食事をストックから減らす。ストックがマイナスになったらNoになるケース。
こういうとこで細かく処理手順を減らすことを意識しておくのもいつか役に立つかもしれない。
C - Connect 6
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++i)
#define per(i,n) for(int i=n-1;i>=0;--i)
#define sc1(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d %d",&a,&b)
#define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c)
#define sl1(a) scanf("%lld",&a)
#define sl2(a,b) scanf("%lld %lld",&a,&b)
#define sl3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c)
#define PI 3.1415926535897932
#define ll long long
#define print(a) cout << a << endl
int souwa(int a) {return (1+a)*a/2;}
int lcm(int a,int b) { return a*b/__gcd(a,b); }
bool sankaku(int a,int b,int c) {vector <int> t={a,b,c};sort(t.begin(),t.end()); return t.at(0)+t.at(1)>t.at(2);};
int main(){
int n,m,x,y,cnt=0,ans=0;
cin >> n;
vector<string> a(n);
rep(i,n) cin >> a.at(i);
rep(i,n) {
cnt=0;
rep(j,n) {
if(a.at(i).at(j)=='#') cnt++;
if(j>5 && a.at(i).at(j-6)=='#') cnt--;
if (cnt>=4) ans=1;
}
}
rep(i,n) {
cnt=0;
rep(j,n) {
if(a.at(j).at(i)=='#') cnt++;
if(j>5 && a.at(j-6).at(i)=='#') cnt--;
if (cnt>=4) ans=1;
}
}
rep(i,n) {
rep(j,n) {
cnt=0;
rep(k,6) {
if (i+k>=n || j+k>=n) break;
if (a.at(i+k).at(j+k)=='#') cnt++;
if (cnt>=4 && k==5) ans=1;
}
}
}
rep(i,n) {
rep(j,n) {
cnt=0;
rep(k,6) {
if (i+k>=n || j-k<0) break;
if (a.at(i+k).at(j-k)=='#') cnt++;
if (cnt>=4 && k==5) ans=1;
}
}
}
cout << ((ans==1)?"Yes":"No") << endl;
return 0;
}
中々手が動かなかった。dpとか必要かと勘違いした。特に必要なかった。
座標の操作が必要な問題とかは書きやすい書き方、ミスしない書き方とかを工夫して習得したいですね。
連続6マスのどこかで4文字#ならYesになるんですが書き方によっては6文字未満の区間を4文字#でYesにするとWAに繋がるのでよしなに。