Game

 Accepts: 138
 Submissions: 358
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 131072/131072 K (Java/Others)
Problem Description

BrotherK is very rich. He has a big company.

One day, BrotherK wants to give an award to one of the employees in the company. It's so hard to make a choise that BrotherK decides to play a game to determine the lucky dog.

At the beginning of the game, all NN employees form a circle. Then, they receive t-shirts with numbers 1 through NN in clockwise order along the circle.

The game consists of many turns. In the ith turn, BrotherK starts by standing in front of a employee and announces a number X_iX​i​​. He will move to the (X_i+1X​i​​+1)th-next-employee in clockwise order, and the X_iX​i​​th-next-employees will be removed from the circle, then the (i+1)th turn starts.

Attention that the 1th-next-employee of a employee is itself, and BrotherK stands in front of the employee with number 1 at first. In the ith turn, The value of X_iX​i​​ is chosen randomly from a given integer set SS. When there is only one employee left in the game, the game ends and the employee wins the award.

You are given the int NN and the set of integers, BrotherK wants to know which employees are possible to win.

Input

The first line contains a single integer TT, indicating the number of test cases.

Each test case begins with two integer N, MN,M, indicating the number of employees in BrotherK's company, and the size of BrotherK's integer set SS. Next line contains MM numbers, from a_1a​1​​ to a_Ma​M​​, indicating the integer in SS.

TT is about 50

1~\le~N, M~\le~2001 ≤ N,M ≤ 200

1~\le~a_i~\le~10^91 ≤ a​i​​ ≤ 10​9​​

Output

For each test, print two lines.

The first line contains a integer KK, indicating how many people are possible to win.

The second line contains KK number, indicating the number in T-shirt who can win, in ascending order.

Sample Input
2
3 1
1
3 2
1 2
Sample Output
1
3
3
1 2 3
思路:dp+约瑟夫环;
约瑟夫环的问题可以用递推来解决,ans[n] = (ans[n-1]+m)%n;那么这次每次可以有多个间隔,那么dp[i][j]表示当执行第n-i+1次时下标为j是否存在;具体过程看代码
 1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<string>
5 #include<cmath>
6 #include<cstdlib>
7 #include<queue>
8 #include<stack>
9 #include<map>
10 #include<vector>
11 #include<algorithm>
12 using namespace std;
13 typedef long long LL;
14 bool flag[10000];
15 int dp[205][205];
16 int ask[1000];
17 int main(void)
18 {
19 int T;
20 scanf("%d",&T);
21 while(T--)
22 {
23 int n,m;
24 memset(flag,0,sizeof(flag));
25 scanf("%d %d",&n,&m);
26 int i,j;
27 memset(dp,-1,sizeof(dp));
28 for(i = 2; i < 205; i++)
29 {
30 for(j = 0; j < 205; j++)
31 {
32 dp[i][j] = -1;
33 }
34 }
35 for(i = 0; i < m; i++)
36 {
37 scanf("%d",&ask[i]);
38 }
39 dp[1][0] = 1;
40 for(i = 2; i <= n; i++)
41 for(j = 0; j <= i; j++)
42 if(dp[i-1][j]!=-1)
43 for(int s = 0; s < m; s++)
44 dp[i][(j+ask[s])%i] = 1;
45 int sum = 0;
46 int ac[1000];
47 for(i = 0; i < n; i++)
48 {
49 if(dp[n][i]==1)
50 {
51 ac[sum++] = i+1;
52 }
53 }
54 printf("%d\n",sum);
55 printf("%d",ac[0]);
56 for(i = 1; i < sum; i++)
57 printf(" %d",ac[i]);
58 printf("\n");
59 }
60 return 0;
61 }

Game(hdu5218)的更多相关文章

  1. [hdu5218]DP-约瑟夫环变形

    题意:n个人围成一圈,另外一个人最开始站在第一个人前面,每次从集合s里面随机选一个数x,这个人顺时针经过x个人后停下来,当前位置的前一个人出队,然后继续进行,求最后剩下的那个人的可能编号. 思路:由于 ...

随机推荐

  1. Bebug与Release版本

    如果调试过程无调试信息,检查编译选项是否切换到了release下 比如Cfree5等编译器 ms为了方便调试才诞生了DEBUG版. 这也导致了MFC有两个功能一至但版本不同的类库,一个为DEBUG版, ...

  2. 【Redis】Sentinel 哨兵模式

    Sentinel(哨兵模式) 目录 Sentinel(哨兵模式) 哨兵模式的三个定时任务 Sentinel(哨兵)与Sentinel .主服务器.从服务器之间的连接 检测下线状态 选择领头 Senti ...

  3. Qemu/kvm虚拟化源码解析学习视频资料

    地址链接:tao宝搜索:Linux云计算KVM Qemu虚拟化视频源码讲解+实践​https://item.taobao.com/item.htm?ft=t&id=646300730262 L ...

  4. Echart显示后端mysql数据

    一.基本思想 1.将数据存储在mysql数据库中 2.后端链接数据库,将数据库中的数据保存为json格式 3.将json格式数据使用ajax传到前端JSP页面中的Echarts 二.实现的关键点 1. ...

  5. LeetCode一维数组的动态和

    一维数组的动态和 题目描述 给你一个数组 nums.数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]...nums[i]). 请返回 nums 的动态和. 示例 1: ...

  6. 编程之美Q1

    题目 和数书页有点类似,就直接数吧 #include<iostream> using namespace std; class q1 { public: size_t func(size_ ...

  7. Oracle异常处理——ORA-01502:索引或这类索引的分区处于不可用状态

    Oracle异常处理--ORA-01502:索引或这类索引的分区处于不可用状态参考自:https://www.cnblogs.com/lijiaman/p/9277149.html 1.原因分析经过查 ...

  8. Logback设置保留日志文件个数

    Logback日志文件占用存储空间太多,设置保留文件个数,清理之前的文件. 主要由如下三个参数配合使用 maxHistory ,可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,,例如设置 ...

  9. go 代理

    环境变量中设置 #GO111MODULE=auto GOPROXY=https://goproxy.io 如果不第一次,则在命令行设置 go env -w GO111MODULE=on go env ...

  10. 为Python的web框架编写前端模版的教程

    虽然我们跑通了一个最简单的MVC,但是页面效果肯定不会让人满意. 对于复杂的HTML前端页面来说,我们需要一套基础的CSS框架来完成页面布局和基本样式.另外,jQuery作为操作DOM的JavaScr ...