AtCoder Beginner Contest 080

はい。
https://beta.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で最大値を保存しておいて最後に出力で