2022summer6
queue_60%代码
#include<bits/stdc++.h>
using namespace std;
int n,m,a[200010],h=100000,t=100000;
int del[100010];
void insertl(int x,int y)
//在数组中x这个位置插入一个数y 并让x及其之后的数往右挪一个
{
t++;
for(int i=t;i>=x;i--) a[i]=a[i-1];
a[x]=y;
}
void insertr(int x,int y)
//在数组中x这个位置插入一个数y 并让x及其之前的数往左挪一个
{
h--;
for(int i=h;i<=x;i++) a[i]=a[i+1];
a[x]=y;
}
//void del(int x)
//{
// t--;
// for(int i=x;i<=t;i++) a[i]=a[i+1];
//}
int main()
{
scanf("%d",&n);
a[100000]=1;
for(int i=2;i<=n;i++)
{
int k,p;
scanf("%d%d",&k,&p);
int tmp;
for(int j=h;j<=t;j++)//找k的位置
{
if(a[j]==k)
{
tmp=j;
break;
}
}
if(p==0) insertl(tmp,i);
//在数组中tmp这个位置插入一个数 并让tmp及其之后的数往右挪一个
else insertr(tmp,i);
}
cin>>m;
for(int i=1;i<=m;i++)
{
int x;
scanf("%d",&x);
del[x]=1;
// int tmp=-1;
// for(int j=h;j<=t;j++)//找x的位置
// {
// if(a[j]==x)
// {
// tmp=j;
// break;
// }
// }
// if(tmp!=-1) del(tmp);//把数组中位置在tmp的数删除
}
for(int i=h;i<=t;i++) if(!del[a[i]]) printf("%d ",a[i]);
return 0;
}
max_20%代码
#include<bits/stdc++.h>
using namespace std;
int n,a[10010],ans[10010];
int gcd(int a,int b)
{
if(b>0) return gcd(b,a%b);
else return a;
}
void dfs(int x,int cnt,int g)
{
if(x==n+1)
{
if(cnt==0) return;
if(g>ans[cnt]) ans[cnt]=g;
return;
}
dfs(x+1,cnt,g);
if(cnt==0) dfs(x+1,cnt+1,a[x]);
else dfs(x+1,cnt+1,gcd(g,a[x]));
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
dfs(1,0,0);
for(int i=1;i<=n;i++) cout<<ans[i]<<endl;
return 0;
}
max_50%代码
#include <bits/stdc++.h>
using namespace std;
int main() //
{
freopen("max.in","r",stdin);
freopen("max.out","w",stdout);
int n,k[10010],maxk=0;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>k[i];
if(maxk<k[i])
{
maxk=k[i];
}
}
for(int j=1; j<=n; j++)//要选j个人
{
//j个人
for(int i=maxk; i>=1; i--)//枚举他们能达到的默契值
{
//默契值是i
int flg=0;
for(int ik=0; ik<n; ik++)//判断有多少个人有i这个因数
{
if(k[ik]%i==0)
{
flg++;//找到一个人flg++
if(flg>=j)
{
break;
}
}
}
if(flg>=j)
{
maxk=i;
cout<<i<<endl;
break;
}
}
}
return 0;
}