sdut 2351 In Danger (找规律)

时间:2023-11-24 22:30:56

题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2351

题意:xyez, xy表示一个十进制数,z表示xy后面有几个0,这些个人成一个约瑟夫环,隔一个人杀一个人。。

求哪个位置上的人会幸存,用一般的方法会超时。

周赛的题,没做出来, 打表以后会找出来规律, 每2^n 都是1会幸存,

剩下的成1 2 3 1 3 5 7 1 3 5 7 9 11 13 15

这样的规律。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std; int main()
{
int i, a, b, len, sum;
int cnt;
char s[];
while(~scanf("%s", s) && strcmp(s,"00e0")!=)
{
b = ;
a = (s[] - )* + s[] - ;
len = s[] - ;
while(len--)
{
b *= ;
}
a = a*b;
sum = ;
for(i = ; i <= ; i++)
{
if(sum > a)
break;
sum *= ;
}
sum /= ;
cnt = ;
for(i = sum; i < a; i++)
cnt += ;
printf("%d\n", cnt);
}
return ;
}