結果
| 問題 |
No.468 役に立つ競技プログラミング実践編
|
| ユーザー |
|
| 提出日時 | 2016-12-19 17:37:18 |
| 言語 | C90 (gcc 12.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,563 bytes |
| コンパイル時間 | 456 ms |
| コンパイル使用メモリ | 22,912 KB |
| 実行使用メモリ | 21,948 KB |
| 最終ジャッジ日時 | 2024-12-14 09:00:30 |
| 合計ジャッジ時間 | 4,110 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 31 |
| other | AC * 6 |
コンパイルメッセージ
main.c:13:6: warning: built-in function ‘index’ declared as non-function [-Wbuiltin-declaration-mismatch]
13 | long index[100000];
| ^~~~~
main.c: In function ‘main’:
main.c:63:9: warning: implicit declaration of function ‘memset’ [-Wimplicit-function-declaration]
63 | memset(limit,1,sizeof(limit));
| ^~~~~~
main.c:3:1: note: include ‘<string.h>’ or provide a declaration of ‘memset’
2 | #include<stdlib.h>
+++ |+#include <string.h>
3 | #define max(x,y) ((x)>(y)?(x):(y))
main.c:63:9: warning: incompatible implicit declaration of built-in function ‘memset’ [-Wbuiltin-declaration-mismatch]
63 | memset(limit,1,sizeof(limit));
| ^~~~~~
main.c:63:9: note: include ‘<string.h>’ or provide a declaration of ‘memset’
main.c:27:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
27 | scanf("%ld %ld",&n,&m);
| ^~~~~~~~~~~~~~~~~~~~~~
main.c:29:17: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
29 | scanf("%ld %ld %d",&pass[i].f,&pass[i].e,&pass[i].cost);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<stdio.h>
#include<stdlib.h>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
long n,m,work[100000];
typedef struct{
int cost;
long f,e;
} node;
node pass[500000];
long index[100000];
long next[100000];
long time[100000];
long limit[100000];
int cmp_1(const void *a,const void*b){
return ((node*)a)->f-((node*)b)->f;
}
int cmp_2(const void*a,const void*b){
return ((node*)a)->e-((node*)b)->e;
}
int main(){
long i,j,count,cri;
scanf("%ld %ld",&n,&m);
for(i=0;i<m;i++){
scanf("%ld %ld %d",&pass[i].f,&pass[i].e,&pass[i].cost);
work[pass[i].e]++;
}
qsort(pass,m,sizeof(node),cmp_1);
j=0;
for(i=0;i<m && j<n-1;i++){
if(pass[i].f!=j){
j++;
index[j]=i;
}
}
for(i=0;i<n;i++){
count=0;
for(j=index[next[i]];pass[j].f==next[i];j++){
time[pass[j].e]=max(time[pass[j].e],time[next[i]]+(long)pass[j].cost);
work[pass[j].e]--;
if(work[pass[j].e]==0){
count++;
next[i+count]=pass[j].e;
}
}
}
printf("%ld ",time[n-1]);
qsort(pass,m,sizeof(node),cmp_2);
j=0;
for(i=0;i<m;i++){
if(pass[i].e!=j){
j++;
index[j]=i;
}
work[pass[i].f]++;
}
cri=1;
next[0]=n-1;
memset(limit,1,sizeof(limit));
limit[n-1]=time[n-1];
for(i=0;i<n;i++){
count=0;
for(j=index[next[i]];pass[j].e==next[i];j++){
limit[pass[j].f]=min(limit[pass[j].f],limit[next[i]]-(long)pass[j].cost);
work[pass[j].f]--;
if(work[pass[j].f]==0){
if(time[pass[j].f]==limit[pass[j].f]){
cri++;
}
count++;
next[i+count]=pass[j].f;
}
}
}
printf("%ld/%ld\n",n-cri,n);
return 0;
}