/*
题意:模拟一个洗牌的过程,将第L张到R张牌放到最上面,重复N次。
每次洗牌后,前R张牌的顺序是不变的(把前R张牌看做一个环)。比如1 2 3 4 5 6一共6张牌,L=3, R=6,洗一次牌为3 4 5 6 1 2,再洗一次5 6 1 2 3 4。。。。。。。。
开始一直找规律要求解循环的次数,没找到,后来直接弄while循环,每次都找循环的次数。
找到循环次数,对N取余,以此找到最上面的数是第几个,然后输出,R以后的数是不会有变化的
Accepted | 4350 | 0MS | 248K | 733 B | C++ |
*/
#include<iostream>
using namespace std;
int ch[100];
int main()
{
int n;
int p=1;
scanf("%d", &n);
while( n-- )
{
int i, j;
//memset(p, false, sizeof(p));
for( i=1; i <= 52; i++ )
scanf("%d", &ch[i]);
int l, r, time;
scanf("%d%d%d", &time, &l, &r);
int key = l, t=1;
while(key != 1)
{
key += l-1;
if(key > r )
key -= r;
t++;
}
time %= t;
key = 1;
while(time)
{
key += l-1;
if(key > r)
key -= r;
time--;
}
printf("Case #%d:", p++);
for( i=key; i <= r; i++ )
printf(" %d", ch[i]);
for( i=1; i < key; i++ )
printf(" %d", ch[i]);
for( i=r+1; i < 53; i++ )
printf(" %d", ch[i]);
printf("\n");
}
return 0;
}