AtCoder Beginner Contest 080
はい。
https://atcoder.jp/contests/abc080
A - Parking
Python3
n,a,b=map(int,input().split()) print(min(n*a,b))
比較すれば大丈夫、多分。
B - Harshad Number
Pyhthon3
n=int(input()) t=0 for i in str(n): t+=int(i) print("Yes" if n%t==0 else "No")
サンプルのとおりに計算。言語によってstrとintとかの扱いで各桁の和の作り方が%10で1桁目取って/=してとかするかもしれない。
C - Shopping Street
C++14
#include<bits/stdc++.h> using namespace std; int main(){ int n; scanf("%d",&n); bool f[n][10]; int p[n][11]; int cnt[n]={0}; long long ans=0; for (int i=0;i<n;i++) for (int j=0;j<10;j++) { cin>>f[i][j]; } for (int i=0;i<n;i++) for (int j=0;j<11;j++) cin>>p[i][j]; long long tmp; for (int i=1;i<(1<<10);i++) { tmp=0; for (int x=0;x<n;x++) cnt[x]={0}; for (int j=0;j<10;j++) { if (i&(1<<j)) for (int k=0;k<n;k++) if (f[k][j]) cnt[k]++; } for (int l=0;l<n;l++) tmp+=p[l][cnt[l]]; if (i==1) ans=tmp; else ans=max(ans,tmp); } printf("%lld\n",ans); return 0; }
問題文の解読に大変苦戦した。解読するまでサンプルの計算結果も意味がわからなかった。サンプル1は商店街に1件のお店があって営業時間は1 1 0 1....。両方のお店が営業している回数が0回なら利益3、1回なら利益4...。これの回数5回で8が解になっている。商店街のお店のほうが5回しか開いていないので6回目分以降は無効なデータみたいな感じになってると思う、多分。解法はbit使った全列挙で全パターンの利益計算しながらmaxで最大値を保存しておいて最後に出力で。
D - Recording
PyPy3
n,c=map(int,input().split()) d=[[] for i in range(c)] w=[0]*100002 for i in range(n): s,t,x=map(int,input().split()) d[x-1].append((s,t)) for i in range(c): d[i].sort() e=0 for j in range(len(d[i])): if len(d[i])==1: w[d[i][0][0]]+=1 w[d[i][0][1]+1]-=1 elif j==0: w[d[i][0][0]]+=1 e=d[i][0][1] elif j+1==len(d[i]): if e!=d[i][j][0]: w[e+1]-=1 w[d[i][j][0]]+=1 w[d[i][j][1]+1]-=1 else: if e!=d[i][j][0]: w[e+1]-=1 w[d[i][j][0]]+=1 e=d[i][j][1] ans=chk=0 for i in w: chk+=i ans=max(ans,chk) print(ans)
続けて録画できるものは続けて録画する。通称imos法で+1,-1したりして数列内で最大になるのが録画に必要な最大個数だと思います。