其他分享
首页 > 其他分享> > hdu4841 圆桌问题

hdu4841 圆桌问题

作者:互联网

这本应是一道很简单的模拟题,时间复杂度,然而数据范围,n和m最大为32767,用模拟理应超时。

 

 一通百度过后,发现很多人用模拟,然后我也模拟了一下,A了。

 1 #include <cstdio>
 2 #include <vector>
 3 #include <numeric>
 4 #include <string>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int n, m;
10     while (~scanf("%d%d", &n, &m)) {
11         string ans(2*n, 'G');
12         vector<int> nxt(2*n+1);  // nxt[i]=j代表第i个位置的下一个未被处死的人的位置是j
13         iota(nxt.begin(), nxt.end(), 1); nxt[2*n-1] = 0;
14         int p = 2*n-1, pre;
15         for (int i = 0; i < n; ++i) {
16             for (int j = 0; j < m; ++j) pre = p, p = nxt[p]%(2*n);
17             ans[p] = 'B';  // 坏人
18             nxt[pre] = nxt[p];
19         }
20         // puts(ans.c_str());  // PE,要求:50个字母为一行,不允许出现空白字符。相邻数据间留有一空行
21         for (int i = 1; i <= 2*n; ++i) {
22             putchar(ans[i-1]);
23             if (i == 2*n) break;
24             if (i%50 == 0) puts("");
25         }
26         puts(""); puts("");
27     }
28     return 0;
29 }

 过是过了,然而输入n和m均为9999时就会发现肉眼可见的超时。

 那么,有没有能真正AC的方法呢?

 我不知道。

标签:pre,nxt,int,问题,++,ans,include,圆桌,hdu4841
来源: https://www.cnblogs.com/zbhfz/p/14307314.html