結果
| 問題 |
No.1228 I hate XOR Matching
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-09-11 22:53:32 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,048 bytes |
| コンパイル時間 | 820 ms |
| コンパイル使用メモリ | 72,928 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-12-27 18:00:59 |
| 合計ジャッジ時間 | 5,309 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 30 WA * 1 |
コンパイルメッセージ
main.cpp:95:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
95 | main()
| ^~~~
ソースコード
#include<iostream>
#include<vector>
using namespace std;
int K,X;
int outbit;
vector<int>ans;
void g7(int,int,int);
void g4(int,int);
void g11(int a,int b,int c)
{
g7(a,b,c);
a=1<<a;b=1<<b;c=1<<c;
ans.push_back(a|c);
ans.push_back(a|c);
ans.push_back(b|c);
ans.push_back(b|c);
}
void g7(int a,int b,int c)
{
g4(a,b);
a=1<<a;b=1<<b;c=1<<c;
ans.push_back(c);
ans.push_back(c);
ans.push_back(a|b|c);
ans.push_back(a|b|c);
}
void g4(int a,int b)
{
a=1<<a;b=1<<b;
ans.push_back(a);
ans.push_back(a);
ans.push_back(b);
ans.push_back(b);
ans.push_back(a|b);
ans.push_back(a|b);
}
void f(int cnt)
{
if(cnt<=19)
{
for(int i=0,t=0;t<cnt;i++)
{
if(i!=outbit)
{
t++;
ans.push_back(1<<i);
ans.push_back(1<<i);
}
}
return;
}
vector<int>ok;
for(int i=0;i<20;i++)if(i!=outbit)ok.push_back(i);
if(cnt==21)
{
g7(ok[0],ok[1],ok[2]);
g7(ok[3],ok[4],ok[5]);
g7(ok[6],ok[7],ok[8]);
return;
}
g11(ok[0],ok[1],ok[2]);
if(cnt==20||cnt==25)
{
g7(ok[4],ok[5],ok[6]);
if(cnt==20)
{
ans.push_back(0);
ans.push_back(0);
}
else
{
g7(ok[7],ok[8],ok[9]);
}
return;
}
g11(ok[4],ok[5],ok[6]);
if(cnt==23||cnt==24)
{
ans.push_back(0);
if(cnt==24)ans.push_back(0);
return;
}
if(cnt==29)
{
g7(ok[8],ok[9],ok[10]);
return;
}
g4(ok[8],ok[9]);
if(cnt==27||cnt==28)
{
ans.push_back(0);
if(cnt==28)ans.push_back(0);
}
}
main()
{
cin>>K>>X;
if(K==0)
{
if(X==0)
{
ans.push_back(1);
}
else if((X+1&-X-1)==X+1)
{
X+=1;
int cnt=0;
while(X>1)
{
X/=2;
cnt++;
}
outbit=-1;
f(cnt);
}
}
else
{
if(X==0)
{
ans.push_back(0);
}
else if(X==1)
{
ans.push_back(K);
}
else if((X&-X)==X)
{
int cnt=0;
while(X>1)
{
X/=2;
cnt++;
}
while(!(K>>outbit&1))outbit++;
f(cnt);
ans.push_back(K);
}
}
if(ans.empty())cout<<"No"<<endl;
else
{
cout<<"Yes"<<endl<<ans.size()<<endl;
for(int i=0;i<ans.size();i++)
{
cout<<ans[i];
if(i+1==ans.size())cout<<"\n";
else cout<<" ";
}
}
}