From 89d4d3040e067c320fa52f5a5f520e39a3c1769f Mon Sep 17 00:00:00 2001 From: Samuel <138226245+GuoYuKai-SaMuEl@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:32:07 +0800 Subject: [PATCH] update --- pB/gen/data | 137 ++++++++++++++++++++++++++++++++++++++-- pB/gen/gen.cpp | 41 ++++++++---- pB/solution/correct.cpp | 51 ++++++++++++--- pB/statement/index.md | 24 ++++--- pB/subtasks.json | 36 ++++++++++- 5 files changed, 254 insertions(+), 35 deletions(-) diff --git a/pB/gen/data b/pB/gen/data index 8babf9d..13ba1b5 100644 --- a/pB/gen/data +++ b/pB/gen/data @@ -1,8 +1,135 @@ -# see https://github.com/ioi-2017/tps/blob/master/docs/README.md#gendata -# TODO @subtask samples manual example-1.in +manual example-2.in -@subtask full -gen 20 -gen 30 +@subtask 1 +gen 1 1 +gen 1 2 +gen 1 3 +gen 1 4 +gen 1 5 +gen 1 6 +gen 1 7 +gen 1 8 +gen 1 9 +gen 1 10 +gen 1 11 +gen 1 12 +gen 1 13 +gen 1 14 +gen 1 15 +gen 1 16 +gen 1 17 +gen 1 18 +gen 1 19 +gen 1 20 + +@subtask 2 +gen 2 21 +gen 2 22 +gen 2 23 +gen 2 24 +gen 2 25 +gen 2 26 +gen 2 27 +gen 2 28 +gen 2 29 +gen 2 30 +gen 2 31 +gen 2 32 +gen 2 33 +gen 2 34 +gen 2 35 +gen 2 36 +gen 2 37 +gen 2 38 +gen 2 39 +gen 2 40 + +@subtask 3 +gen 3 41 +gen 3 42 +gen 3 43 +gen 3 44 +gen 3 45 +gen 3 46 +gen 3 47 +gen 3 48 +gen 3 49 +gen 3 50 +gen 3 51 +gen 3 52 +gen 3 53 +gen 3 54 +gen 3 55 +gen 3 56 +gen 3 57 +gen 3 58 +gen 3 59 +gen 3 60 + +@subtask 4 +gen 4 61 +gen 4 62 +gen 4 63 +gen 4 64 +gen 4 65 +gen 4 66 +gen 4 67 +gen 4 68 +gen 4 69 +gen 4 70 +gen 4 71 +gen 4 72 +gen 4 73 +gen 4 74 +gen 4 75 +gen 4 76 +gen 4 77 +gen 4 78 +gen 4 79 +gen 4 80 + +@subtask 5 +gen 5 81 +gen 5 82 +gen 5 83 +gen 5 84 +gen 5 85 +gen 5 86 +gen 5 87 +gen 5 88 +gen 5 89 +gen 5 90 +gen 5 91 +gen 5 92 +gen 5 93 +gen 5 94 +gen 5 95 +gen 5 96 +gen 5 97 +gen 5 98 +gen 5 99 +gen 5 100 + +@subtask 6 +gen 6 101 +gen 6 102 +gen 6 103 +gen 6 104 +gen 6 105 +gen 6 106 +gen 6 107 +gen 6 108 +gen 6 109 +gen 6 110 +gen 6 111 +gen 6 112 +gen 6 113 +gen 6 114 +gen 6 115 +gen 6 116 +gen 6 117 +gen 6 118 +gen 6 119 +gen 6 120 \ No newline at end of file diff --git a/pB/gen/gen.cpp b/pB/gen/gen.cpp index 2cd8eb7..8c47735 100644 --- a/pB/gen/gen.cpp +++ b/pB/gen/gen.cpp @@ -1,14 +1,33 @@ -#include #include "testlib.h" +#include using namespace std; - -int main(int argc, char* argv[]) { - registerGen(argc, argv, 1); - // about testlib, see https://codeforces.com/blog/entry/18291 - - // TODO - int n = atoi(argv[1]); - cout << n << endl; - - return 0; +int way[105],t[15],a[105][15],b[105][15],c[105][15],shufa[105],shufb[15]; +inline int randomint(double l,double r){ + return pow(10.,rnd.next(l,r)); } +int main(int argc, char* argv[]){ + registerGen(argc, argv, 1); + int subtask=atoi(argv[1]),idx=atoi(argv[2]); + int n=(idx%2?rnd.next(1,99):100),m=10; + cout< using namespace std; int way[105],t[15],a[105][15],b[105][15],c[105][15],x[105][15][15],y[105][15][15],z[105][15][15],in[105][15]; -long long int dis[105][15]; +long long int dis[105][15],now[105],ans[105]; vector>out[105]; int main(){ int n,m; @@ -9,20 +9,55 @@ int main(){ for(int i=1;i<=n;i++)cin>>way[i]; for(int i=1;i<=m;i++)cin>>t[i]; for(int i=1;i<=n;i++){ + ans[i]=1e15; for(int j=1;j<=way[i];j++){ cin>>a[i][j]; - for(int k=1;k<=a[i][j];k++)cin>>x[i][j][k]>>y[i][j][k]; + for(int k=1;k<=a[i][j];k++){ + cin>>x[i][j][k]>>y[i][j][k]; + out[x[i][j][k]].push_back({i,j}); + } cin>>b[i][j]; for(int k=1;k<=b[i][j];k++)cin>>z[i][j][k]; cin>>c[i][j]; } } - for(int p=0;p<(1<>qu;//store the (item_id,way_id) which can be maken + set>se;//store the (dis,item_id) whose shortest time is determined and can do Dijkstra + for(int i=1;i<=n;i++)for(int j=1;j<=way[i];j++)if(!in[i][j])qu.push({i,j}); + while(se.size()||qu.size()){ + while(qu.size()){ + auto [i,j]=qu.front(); + qu.pop(); + dis[i][j]=c[i][j]; + for(int k=1;k<=a[i][j];k++){ + dis[i][j]+=now[x[i][j][k]]*y[i][j][k]; + } + if(dis[i][j]>=1e15)dis[i][j]=1e15; + else se.insert({dis[i][j],i}); + } + if(se.empty())continue; + auto [temp,i]=*se.begin(); + se.erase(se.begin()); + if(now[i]!=1e15)continue; + now[i]=temp; + for(auto p:out[i]){ + if(--in[p.first][p.second]==0)qu.push(p); + } + } + long long int tsum=0; + for(int i=1;i<=m;i++)if(per&(1<<(i-1)))tsum+=t[i]; + for(int i=1;i<=n;i++)ans[i]=min(ans[i],now[i]+tsum); } + for(int i=1;i<=n;i++)cout< +## 範例輸出1 +\testfile{0-01.out} + +## 範例輸入2 +\testfile{0-02.in} + +## 範例輸出2 +\testfile{0-02.out} \ No newline at end of file diff --git a/pB/subtasks.json b/pB/subtasks.json index b591752..6a88d37 100644 --- a/pB/subtasks.json +++ b/pB/subtasks.json @@ -1,6 +1,6 @@ { "global_validators": [ - "validator.cpp" + ], "subtasks": { "samples": { @@ -9,9 +9,39 @@ "text": "範例輸入輸出", "validators": [] }, - "full": { + "1": { "index": 1, - "score": 100, + "score": 6, + "text": "所有 $a_{i,j}=b_{i,j}=0$", + "validators": [] + }, + "2": { + "index": 2, + "score": 10, + "text": "所有 $a_{i,j}=0$", + "validators": [] + }, + "3": { + "index": 3, + "score": 10, + "text": "所有 $a_{i,j}=1,b_{i,j}=0$", + "validators": [] + }, + "4": { + "index": 4, + "score": 14, + "text": "所有 $a_{i,j}=1$", + "validators": [] + }, + "5": { + "index": 5, + "score": 20, + "text": "所有 $way_i=1$", + "validators": [] + }, + "6": { + "index": 6, + "score": 40, "text": "無額外限制", "validators": [] }