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