求助P10123 [USACO18OPEN] Milking Order B

灌水区

```cpp #include<bits/stdc++.h> #define int long long using namespace std; int n,m,k,a[105],b[105],c[105],d[105]; bool f=0; signed main(){ //freopen("status.in","r",stdin); //freopen("status.out","w",stdout); cin>>n>>m>>k; for(int i=1;i<=m;i++){ cin>>a[i]; b[a[i]]=i; } for(int i=1;i<=k;i++){ int x,y; cin>>x>>y; if(b[x])f=1; c[x]=y; d[y]=x; } if(c[1]){ cout<<c[1]<<"\n"; return 0; } if(b[1]){ for(int i=1;i<=n;i++){ if(!d[i])b[1]--; if(b[1]==0){ cout<<i<<"\n"; return 0; } } } if(f==0){ for(int i=1;i<=n;i++){ if(d[i]==0){ cout<<i<<"\n"; return 0; } } } if(!c[a[m]]) for(int i=n;i>=1;i--){ if(!d[i]){ d[i]=a[m]; c[a[m]]=i; break; } } for(int i=m-1;i>=1;i--){ if(c[a[i+1]]&&!c[a[i]]){ int z=c[a[i+1]]-1; while(d[z])z--; d[z]=a[i]; c[a[i]]=z; } } // for(int i=1;i<=n;i++){ // printf("d[%d]=%d\n",i,d[i]); // } for(int i=1;i<=n;i++){ if(d[i]==0){ cout<<i<<"\n"; return 0; } } return 0; } ```
by oier25 @ 2024-03-24 15:42:02


|