做网站要用什么编程语言,国内十大软件外包公司,合肥网站建设讯息,那些做黑网站的都是团体还是个人题目描述 n个人站成一圈#xff0c;从某个人开始数数#xff0c;每次数到m的人就被杀掉#xff0c;然后下一个人重新开始数#xff0c;直到最后只剩一个人。现在有一圈人#xff0c;k个好人站在一起#xff0c;k个坏人站在一起。从第一个好人开始数数。你要确定一个最小的… 题目描述 n个人站成一圈从某个人开始数数每次数到m的人就被杀掉然后下一个人重新开始数直到最后只剩一个人。现在有一圈人k个好人站在一起k个坏人站在一起。从第一个好人开始数数。你要确定一个最小的m使得在第一个好人被杀死前k个坏人先被杀死。 感谢yh大神指出样例数据的错误。 输入输出格式 输入格式 一个k0k14 输出格式 一个m 输入输出样例 输入样例#13 输出样例#15 输入样例#24 输出样例#230 说明 0k14 分析正解就是暴力.只要稍微优美那么一点点就能过了最最最朴素的暴力就是枚举m然后一位一位地挪非常慢正确的方法是直接取模判断是不是坏人每一个m最多走k次就会结束游戏每次删除一个人后把起点变一下模数变一下就好了.需要注意的一点是每个人的下标要从0开始不然取模的时候可能会得到0然后就炸了. #include cstdio
#include cstring
#include iostream
#include algorithmusing namespace std;int k,m 1,beginn 1;
bool flag false,flag2 false;bool check(int mod)
{int t (beginn m - 1) % mod;if (t k){beginn t;return true;} return false;
}int main()
{scanf(%d,k);m k;while (1){beginn 0;flag2 0;for (int i 0; i k; i){if (!check(2 * k - i)){flag2 1;break;}}if (!flag2)break;m;}printf(%d\n,m);return 0;
} 转载于:https://www.cnblogs.com/zbtrs/p/7465075.html