2 条题解
-
0
#include<bits/stdc++.h> using namespace std; int k, m; bool bk; //判断是否合法 void dfs(int x, int s) // x为当前点,s为杀死的坏人个数 { if(s==k) return ; //杀死了 k个坏人,结束 int n=2*k-s; //当前存活人数 int y=(x+m-1)%n+1; //下一个数到 m的人 if(y<=k) {bk=false; return ;} // 下一个杀掉的人是好人,不合法 退出 dfs(y-1, s+1); //从 y开始数的下一次,已杀死 s+1个人 } int main() { scanf("%d",&k); for(int i=k+1; ; i++) //枚举 m { if((i-1)%(2*k)+1>k) //保证第一个数到 m的人是坏人 { bk=true; m=i; //初始化 bk,记录 i dfs(0,0); //开始递归 if(bk) {printf("%d\n", m); break;} //找到最小合法 m了, 输出 } } return 0; } -
0
#include<bits/stdc++.h> using namespace std; int k, m; bool bk; //判断是否合法 void dfs(int x, int s) // x为当前点,s为杀死的坏人个数 { if(s==k) return ; //杀死了 k个坏人,结束 int n=2*k-s; //当前存活人数 int y=(x+m-1)%n+1; //下一个数到 m的人 if(y<=k) {bk=False; return ;} // 下一个杀掉的人是好人,不合法 退出 dfs(y-1, s+1); //从 y开始数的下一次,已杀死 s+1个人 } int main() {</p>scanf("%d",&k); for(int i=k+1; ; i++) //枚举 m { if((i-1)%(2*k)+1>k) //保证第一个数到 m的人是坏人 { bk=1; m=i; //初始化 bk,记录 i dfs(0,0); //开始递归 if(bk) {printf("%d\n", m); break;} //找到最小合法 m了, 输出 } } return 0;}
- 1
信息
- ID
- 693
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 21
- 已通过
- 13
- 上传者