比赛 |
“Asm.Def战记之拉格朗日点”杯 |
评测结果 |
AAWWWWWWWW |
题目名称 |
Asm.Def的微小贡献 |
最终得分 |
20 |
用户昵称 |
lxtgogogo |
运行时间 |
0.115 s |
代码语言 |
C++ |
内存使用 |
0.42 MiB |
提交时间 |
2015-11-04 10:30:43 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<queue>
#include<ctime>
#include<cstdlib>
using namespace std;
int n=0;
bool a[1010][100]={};
int len[1010]={},now[100]={},t[1010]={};
int f[1010]={};
bool hehe=false;
void init(){
cin>>n;
long long num=0;
for(int i=1;i<=n;i++)
{
cin>>num;
while(num)
{
a[i][++len[i]]=num%2;
num>>=1;
}
}
}
void dfs(int k){
if(k==n+1 || hehe) return ;
bool flag=true,ff=false;
for(int i=1;i<=60;i++)
{
if(now[i]%2!=0)
{
flag=false;
break;
}
if(now[i]>0) ff=true;
}
if(flag && ff)
{
int s=0;
for(int i=1;i<=n;i++)
if(f[i]) s++;
cout<<s<<endl;
for(int i=1;i<=n;i++)
if(f[i]) cout<<i<<' ';
cout<<endl;
hehe=true;
return ;
}
f[k]=true;
for(int i=1;i<=len[k];i++)
now[i]+=a[k][i];
dfs(k+1);//Ҫ
f[k]=false;
for(int i=1;i<=len[k];i++)
now[i]-=a[k][i];
dfs(k+1);//buҪ
}
void work(){
srand(n);
int s=rand()%n;
cout<<s<<endl;
for(int i=1;i<=s;i++)
{
int x=rand()%n;
while(f[x]) x=rand()%n;
t[i]=x;
f[x]=true;
}
sort(t+1,t+s+1);
for(int i=1;i<=s;i++)
cout<<t[i]<<' ';
cout<<endl;
}
int main(){
freopen("asm_contribute.in","r",stdin);
freopen("asm_contribute.out","w",stdout);
init();
if(n<=5)
{
if(n%2==0)
{
cout<<n<<endl;
for(int i=1;i<=n;i++) cout<<i<<' ';
cout<<endl;
}
else
{
cout<<n-1<<endl;
for(int i=1;i<n;i++) cout<<i<<' ';
cout<<endl;
}
}
else if(n<=28) dfs(1);
else work();
fclose(stdin);fclose(stdout);
return 0;
}