2 条题解
-
0
搬运工 (syrth0p1) LV 10 @ 2025-06-10 17:33:28
#include<cstdio> #include<algorithm> #define max(x,y) (x>y?x:y) #define min(x,y) (x<y?x:y) using namespace std; int n,m,q,x[25000001],t[25000001],u,v,l[5001],r[5001],tot; long long a,b,c,d; int main() { scanf("%d%lld%lld%lld%lld",&x[0],&a,&b,&c,&d); scanf("%d%d%d",&n,&m,&q); for (int i=1;i<=n*m;i++) x[i]=(x[i-1]*(a*x[i-1]+b)+c)%d,t[i]=i; for (int i=1;i<=n*m;i++) swap(t[i],t[x[i]%i+1]); for (int i=1;i<=q;i++) { scanf("%d%d",&u,&v); swap(t[u],t[v]); } for (int i=1;i<=n*m;i++) x[t[i]]=i; for (int i=1;i<=n;i++) l[i]=1,r[i]=m; for (int i=1;i<=n*m;i++) { int xx,yy; if (x[i]%m==0) xx=x[i]/m; else xx=x[i]/m+1; yy=x[i]%m; if (!yy) yy=m; if (yy>=l[xx]&&yy<=r[xx]) { ++tot; printf("%d ",i); if (tot==n+m-1) return 0; for (int j=1;j<=n;j++) if (j<xx) r[j]=min(r[j],yy); else if (j>xx) l[j]=max(l[j],yy); } } return 0; }
-
-42016-01-10 18:27:30@
虽然我没有AC但我来抢个沙发
- 1
信息
- ID
- 1867
- 难度
- 5
- 分类
- (无)
- 标签
- 递交数
- 89
- 已通过
- 31
- 通过率
- 35%
- 被复制
- 3
- 上传者