結果
問題 | No.177 制作進行の宮森あおいです! |
ユーザー |
![]() |
提出日時 | 2018-07-11 01:51:42 |
言語 | C90 (gcc 12.3.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 1,770 bytes |
コンパイル時間 | 403 ms |
コンパイル使用メモリ | 24,832 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-14 07:17:59 |
合計ジャッジ時間 | 1,112 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
コンパイルメッセージ
main.c: In function ‘run’: main.c:56:3: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 56 | scanf("%d",&w); | ^~~~~~~~~~~~~~ main.c:58:3: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 58 | scanf("%d",&n); | ^~~~~~~~~~~~~~ main.c:61:20: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 61 | for(i=0;i<n;i++) scanf("%d",genga+i); | ^~~~~~~~~~~~~~~~~~~ main.c:63:3: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 63 | scanf("%d",&m); | ^~~~~~~~~~~~~~ main.c:65:20: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 65 | for(i=0;i<m;i++) scanf("%d",sakuga+i); | ^~~~~~~~~~~~~~~~~~~~ main.c:82:5: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 82 | scanf("%d",&q); | ^~~~~~~~~~~~~~ main.c:85:7: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 85 | scanf("%d",&x); | ^~~~~~~~~~~~~~
ソースコード
#include<stdio.h>#include<stdlib.h>#include<math.h>typedef long long int int64;#define MAX(a,b) ((a)>(b)?(a):(b))#define MIN(a,b) ((a)<(b)?(a):(b))#define ABS(a) ((a)>(0)?(a):-(a))#define POS(i,j) ((i)*(n+m+2)+(j))int flow(int *g,int n,int m){int used[102];int dp[102];int i;for(i=0;i<n+m+2;i++){used[i]=0;dp[i]=0;}dp[0]=10000;int memo[102];int len=0;while(1){int max=0;int maxIndex=-1;for(i=0;i<n+m+2;i++){if(!used[i] && dp[i]>max){max=dp[i];maxIndex=i;}}if(max==0) break;used[maxIndex]=1;memo[len++]=maxIndex;for(i=0;i<n+m+2;i++){dp[i]=MAX(dp[i],MIN(dp[maxIndex],g[POS(maxIndex,i)]));}}if(dp[n+m+1]==0) return 0;int now=n+m+1;int f=dp[now];for(i=len-1;now!=0;i--){int k=memo[i];if(dp[k]>=f && g[POS(k,now)]>=f){g[POS(k,now)]-=f;g[POS(now,k)]+=f;now=k;}}return f;}void run(void){int w;scanf("%d",&w);int n;scanf("%d",&n);int genga[50];int i;for(i=0;i<n;i++) scanf("%d",genga+i);int m;scanf("%d",&m);int sakuga[50];for(i=0;i<m;i++) scanf("%d",sakuga+i);int graph[10404];int j;for(i=0;i<n+m+2;i++){for(j=0;j<n+m+2;j++){graph[POS(i,j)]=0;}}for(i=0;i<n;i++) graph[POS(0,i+1)]=genga[i];for(i=0;i<n;i++){for(j=0;j<m;j++){graph[POS(i+1,n+1+j)]=10000;}}for(i=0;i<m;i++) graph[POS(n+1+i,n+m+1)]=sakuga[i];for(i=0;i<m;i++){int q;scanf("%d",&q);while(q--){int x;scanf("%d",&x);graph[POS(x,n+1+i)]=0;}}int f=0;while(w>0 && (f=flow(graph,n,m),f>0)) w-=f;printf("%s\n",w<=0?"SHIROBAKO":"BANSAKUTSUKITA");return;}int main(void){run();return 0;}