結果
| 問題 |
No.862 XORでX
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-04-20 15:40:32 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 279 ms / 2,000 ms |
| コード長 | 2,651 bytes |
| コンパイル時間 | 2,456 ms |
| コンパイル使用メモリ | 80,072 KB |
| 実行使用メモリ | 62,592 KB |
| 最終ジャッジ日時 | 2024-10-06 08:55:54 |
| 合計ジャッジ時間 | 11,813 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 28 |
ソースコード
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
void run() {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int X=sc.nextInt();
PrintWriter pw=new PrintWriter(System.out);
ArrayList<Integer> ans=solve(N,X);
for (int v:ans) {
pw.println(v);
}
pw.flush();
}
ArrayList<Integer> solve(int N,int X) {
ArrayList<Integer> ans=new ArrayList<>();
if (N==1) {
ans.add(X);
} else if (N==2) {
for (int i=1;i<=1e5+5;++i) {
if (i!=(i^X) && 1<=(i^X) && (i^X)<=1e5+5) {
ans.add(i);
ans.add(i^X);
break;
}
}
} else if (N%4==0) {
int res=N;
if (X==1) {
ans.add(1);
ans.add(2);
ans.add(4);
ans.add(6);
res-=4;
for (int i=8;i<=1e5+5;++i) {
if (res>0) {
ans.add(i);
--res;
}
}
return ans;
}
int L=(X-2)/4*4+2;
int R=L+4;
ans.add(X);
ans.add(1);
ans.add(1_000_04);
ans.add(1_000_05);
res-=4;
for (int i=2;i<=1e5+5;++i) {
if (i!=X && res>0 && !(L<=i && i<R)) {
ans.add(i);
--res;
}
}
} else if (N%4==1) {
int res=N;
if (X==1) {
ans.add(1);
--res;
for (int i=4;i<=1e5+5;++i) {
if (res>0) {
ans.add(i);
--res;
}
}
return ans;
}
int L=(X-2)/4*4+2;
int R=L+4;
ans.add(X);
--res;
for (int i=2;i<=1e5+5;++i) {
if (i!=X && res>0 && !(L<=i && i<R)) {
ans.add(i);
--res;
}
}
} else if (N%4==2) {
int res=N;
if (X==1) {
for (int i=2;i<=1e5+5;++i) {
if (res>0) {
ans.add(i);
--res;
}
}
return ans;
}
int L=(X-2)/4*4+2;
int R=L+4;
ans.add((int)1e5+4);
ans.add((int)1e5+5);
ans.add(1);
res-=3;
for (int i=L;i<R;++i) {
if (i!=X && res>0) {
ans.add(i);
--res;
}
}
for (int i=2;i<=1e5+5;++i) {
if (res>0 && !(L<=i && i<R)) {
ans.add(i);
--res;
}
}
} else if (N%4==3) {
int res=N;
if (X==1) {
ans.add(3);
ans.add(4);
ans.add(6);
res-=3;
for (int i=8;i<=1e5+5;++i) {
if (res>0) {
ans.add(i);
--res;
}
}
return ans;
}
int L=2+(X-2)/4*4;
int R=L+4;
for (int i=L;i<R;++i) {
if (i!=X && res>0) {
ans.add(i);
--res;
}
}
for (int i=2;i<=1e5+5;++i) {
if (res>0 && !(L<=i && i<R)) {
ans.add(i);
--res;
}
}
}
return ans;
}
void tr(Object...objects) {System.out.println(Arrays.deepToString(objects));}
public static void main(String[] args) {
new Main().run();
}
}