随机化数组
2021/7/26 23:09:33
本文主要是介绍随机化数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
随机化数组的方法
来源于Problem - B - Codeforces (Unofficial mirror site, accelerated for Chinese users)
当时用随机化数组的方法过了,记录一下,以后可能用到
#include<bits/stdc++.h> using namespace std; struct tnode{ int a[5]; }e[500050]; int zhan[10010],tot,zhan1[100010],cnt,bj[100010],nb[100010],nex[100010]; int cmp(int x,int y) { int ans=0; for(int i=0;i<5;i++) if(e[x].a[i]<e[y].a[i])ans++; if(ans>=3)return true; else return false; } int main() { srand((int)time(0)); // freopen("std.in","r",stdin); int t; cin>>t; while(t--) { tot=0;cnt=0; int n; cin>>n; for(int i=1;i<=n;i++) { scanf("%d%d%d%d%d",&e[i].a[0],&e[i].a[1],&e[i].a[2],&e[i].a[3],&e[i].a[4]); bj[i]=0; nb[i]=0; nex[i]=i+1; } nex[n]=1; if(n==1) { cout<<1<<"\n";continue; } for(int t=1;t<=n;t++) { int maxn=1ll*rand()*rand()%n+1; while(nb[maxn]==1) { // int to=nex[maxn]; // nex[maxn]=nex[to]; maxn=nex[maxn]; } nb[maxn]=1; if(!bj[maxn]) for(int i=1;i<=n;i++) if(i!=maxn){ if(cmp(maxn,i)) { if(bj[i]!=1) { bj[i]=1;nb[i]=1;t++; } } else bj[maxn]=1; } if(t==n)break; for(int l=1,r;l<=n;l=r+1) { while(nb[l]!=0&&l<=n)l++; if(l>n)break; r=l; while(nb[r]==1&&r<=n)r++; if(r>n) { for(int j=l;j<=r;j++) nex[j]=nex[1]; }else for(int j=l;j<=r;j++) nex[j]=nex[r]; } } int maxn=-1; for(int i=1;i<=n;i++) if(!bj[i])maxn=i; cout<<maxn<<"\n"; // for(int i=0;i<5;i++) // { // int bj=0,maxn=50100; // for(int j=1;j<=n;j++) // { // if(maxn>e[j].a[i]) // { // bj=j;maxn=e[j].a[i]; // } // } // zhan[++tot]=bj; // } // sort(zhan+1,zhan+tot+1); // tot=unique(zhan+1,zhan+tot+1)-zhan-1; //// for(int i=1;i<=tot;i++) //// cout<<zhan[i]<<" "; //// cout<<"\n"; // if(tot==1) // { // cout<<zhan[tot]<<"\n";continue; // } // int ans=0; // for(int i=1;i<=tot;i++) // { // int bj=0; // for(int j=1;j<=tot;j++) // if(j!=i){ // if(!cmp(zhan[i],zhan[j]))bj=1; // } // if(!bj) // { // ans=1; // cout<<zhan[i]<<"\n";break; // } // } // if(!ans) // cout<<"-1"<<"\n"; } return 0; }
这篇关于随机化数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19JAVA分布式id教程:轻松入门与实践
- 2024-11-19Java高并发教程:入门与实践指南
- 2024-11-19JAVA高并发直播教程:新手入门指南
- 2024-11-19Java高并发直播教程:入门与实践指南
- 2024-11-19Java微服务教程:初学者快速入门指南
- 2024-11-19JAVA微服务教程:新手入门的详细指南
- 2024-11-19Java微服务教程:从零开始搭建你的第一个微服务应用
- 2024-11-19Java项目开发教程:初学者必备指南
- 2024-11-19Java项目开发教程:新手快速入门指南
- 2024-11-19Java项目开发教程:零基础入门到实战