AtCoder Beginner Contest 080を解きました
AtCoder Beginner Contest 080を解きました
いうてもD問題がまだ解けない
==
A問題
A: Parking - AtCoder Beginner Contest 080 | AtCoder
#include<stdio.h> int main() { int res,N,A,B,p1,p2; scanf("%d %d %d",&N,&A,&B); p1 = A * N; p2 = B; res = p1 > p2 ? p2 : p1; printf("%d\n",res); return 0; }
printf("%d\n", A*N > B ? B : A*N)
でよかったかも
B問題
B: Harshad Number - AtCoder Beginner Contest 080 | AtCoder
#include<stdio.h> int digitsum(int N) { if(N == 0) return 0; else return ((N % 10) + digitsum(N / 10)); } int hjd(int N) { if(N % digitsum(N) == 0) return 1; else return 0; } int main() { int N; scanf("%d",&N); switch(hjd(N)){ case 0 : printf("No\n"); break; case 1 : printf("Yes\n"); break; default : printf("Error\n"); break; } return 0; }
関数作りすぎたかも
C問題
C: Shopping Street - AtCoder Beginner Contest 080 | AtCoder
#include<stdio.h> int N,F[101][6][3],P[101][11]; int max(int x, int y) { return x > y ? x : y; } int daynum(int n,int day[11]) { int i,j,res=0; for(i=1;i<=5;i++) for(j=1;j<=2;j++) res += day[2*(i-1)+j]*F[n][i][j]; return res; } int isZero(int day[11]) { int i; for(i=1;i<=10;i++) if(day[i] != 0) return 0; return 1; } int rieki(int day[11],int date){ if(date == 11){ int n,res=0; if(isZero(day)) return -2000000000; for(n=1;n<=N;n++) res += P[n][daynum(n,day)]; return res; }else{ int i,d1[11],d2[11]; for(i=1;i<=10;i++) d1[i] = d2[i] = day[i]; d1[date] = 1; d2[date] = 0; return max(rieki(d1,date+1),rieki(d2,date+1)); } } int main() { int day[11],i,j,k,res; scanf("%d",&N); for(i=1;i<=N;i++) for(j=1;j<=5;j++) for(k=1;k<=2;k++) scanf("%d",&F[i][j][k]); for(i=1;i<=N;i++) for(j=0;j<=10;j++) scanf("%d",&P[i][j]); for(i=0;i<=10;i++) day[i] = 0; printf("%d\n",rieki(day,1)); return 0; }
関数めちゃくちゃ作りすぎました。
長々と書いてますがやってることは1024通りのパターンを潰しているだけです。一日も営業しない日を潰さなくてはいけないので、day配列がすべて0のときだけありったけの小さい数を返すようにしました。
D問題ができたらまた書きます。