P6E17區叡恆
S1F28黃皓紀
P6E40羅振軒
P6E06余汶憲
劉皓正P5B33
以上用户涉嫌抄袭题目 b060 的参考程序,考虑到公平性,题目 b060 以及题目 a948 将会在今日 12:00 移除
以下是 b060 和 a948 的内容以及参考程序,想要挑战自己的 OIer 可以用自己的程序和参考程序得出的答案来进行测试
题面:
小明手上有 x 张有着编号分别为 1, 2, ... , x 的牌。一开始,他把牌堆放在桌上,牌堆从上到下的编号为 1, 2, ... , x
为了准备接下来的比赛,小明要进行 N 次洗牌。一次洗牌过程如下
这种洗牌方式是众多方式中最快的一个,但也很容易被算出来,请你输出经过 N 次洗牌的牌堆从上到下的编号序
参考程序:
#include<bits/stdc++.h>
using namespace std;
bitset<20> l[1000005],ans[1000005];
bitset<1000005>ap;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int x, n;
cin >> x >> n;
int hx=x/2;
int nw =1,cnt;
while(nw<=x){
while(ap[nw]) nw++;
if(nw>x) break;
cnt=0;
while(!ap[nw]){
l[cnt]=nw;
ap[nw]=true;
cnt++;
if(nw > hx) nw = ((nw-hx)<<1)-1;
else nw = nw<<1;
}
int md = n%cnt;
for(int i =0; i < cnt; i++) ans[l[(md+i)%cnt].to_ulong()]= l[i];
}
for(int i = 1; i <= x; i++){
printf("%d ",ans[i].to_ulong());
}
printf("\n");
return 0;
}
P6E17區叡恆
S1F28黃皓紀
P6E40羅振軒
P6E06余汶憲
劉皓正P5B33
以上用户涉嫌抄袭题目 b060 的参考程序,考虑到公平性,题目 b060 以及题目 a948 将会在今日 12:00 移除
以下是 b060 和 a948 的内容以及参考程序,想要挑战自己的 OIer 可以用自己的程序和参考程序得出的答案来进行测试
题面:
小明手上有 x 张有着编号分别为 1, 2, ... , x 的牌。一开始,他把牌堆放在桌上,牌堆从上到下的编号为 1, 2, ... , x
为了准备接下来的比赛,小明要进行 N 次洗牌。一次洗牌过程如下
- 将牌堆上方的 x / 2 张牌放在一旁,组成一个新牌堆(堆 A ),牌堆从上到下的编号次序不会改变
- 将 堆 A 和剩下的牌堆(堆 B )拿起,并将它们底部的两张牌放在一侧(堆 C ), 其中从 堆 A 拿的牌在 堆 B 拿的牌之下
- 进行以下操作,直至 堆 A 和 堆 B 为空牌堆:
- 将 堆 A 最下面的一张牌放在 堆 C 顶上
- 将 堆 B 最下面的一张牌放在 堆 C 顶上
- 堆 C 成为洗牌过后的牌堆,洗牌结束
这种洗牌方式是众多方式中最快的一个,但也很容易被算出来,请你输出经过 N 次洗牌的牌堆从上到下的编号序
参考程序:
#include<bits/stdc++.h>
using namespace std;
bitset l[1000005],ans[1000005];
bitsetap;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int x, n;
cin >> x >> n;
int hx=x/2;
int nw =1,cnt;
while(nw<=x){
while(ap[nw]) nw++;
if(nw>x) break;
cnt=0;
while(!ap[nw]){
l[cnt]=nw;
ap[nw]=true;
cnt++;
if(nw > hx) nw = ((nw-hx)<<1)-1;
else nw = nw<<1;
}
int md = n%cnt;
for(int i =0; i < cnt; i++) ans[l[(md+i)%cnt].to_ulong()]= l[i];
}
for(int i = 1; i <= x; i++){
printf("%d ",ans[i].to_ulong());
}
printf("\n");
return 0;
}
老師教我們的
P6E17區叡恆
S1F28黃皓紀
P6E40羅振軒
P6E06余汶憲
劉皓正P5B33
以上用户涉嫌抄袭题目 b060 的参考程序,考虑到公平性,题目 b060 以及题目 a948 将会在今日 12:00 移除
以下是 b060 和 a948 的内容以及参考程序,想要挑战自己的 OIer 可以用自己的程序和参考程序得出的答案来进行测试
题面:
小明手上有 x 张有着编号分别为 1, 2, ... , x 的牌。一开始,他把牌堆放在桌上,牌堆从上到下的编号为 1, 2, ... , x
为了准备接下来的比赛,小明要进行 N 次洗牌。一次洗牌过程如下
- 将牌堆上方的 x / 2 张牌放在一旁,组成一个新牌堆(堆 A ),牌堆从上到下的编号次序不会改变
- 将 堆 A 和剩下的牌堆(堆 B )拿起,并将它们底部的两张牌放在一侧(堆 C ), 其中从 堆 A 拿的牌在 堆 B 拿的牌之下
- 进行以下操作,直至 堆 A 和 堆 B 为空牌堆:
- 将 堆 A 最下面的一张牌放在 堆 C 顶上
- 将 堆 B 最下面的一张牌放在 堆 C 顶上
- 堆 C 成为洗牌过后的牌堆,洗牌结束
这种洗牌方式是众多方式中最快的一个,但也很容易被算出来,请你输出经过 N 次洗牌的牌堆从上到下的编号序
参考程序:
#include<bits/stdc++.h>
using namespace std;
bitset l[1000005],ans[1000005];
bitsetap;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int x, n;
cin >> x >> n;
int hx=x/2;
int nw =1,cnt;
while(nw<=x){
while(ap[nw]) nw++;
if(nw>x) break;
cnt=0;
while(!ap[nw]){
l[cnt]=nw;
ap[nw]=true;
cnt++;
if(nw > hx) nw = ((nw-hx)<<1)-1;
else nw = nw<<1;
}
int md = n%cnt;
for(int i =0; i < cnt; i++) ans[l[(md+i)%cnt].to_ulong()]= l[i];
}
for(int i = 1; i <= x; i++){
printf("%d ",ans[i].to_ulong());
}
printf("\n");
return 0;
}
老師教我們的
對啊
想和我吵架争论的去另外一个讨论去说,这里是公告,不要随意留言