题解:P12464 『FCRT / 1 - 1』Seats
signed_long_long · · 题解
默认下面的
题目解法
看到
1 1 2 2 3 3 3 4 5 5 5 5 5 6 7 8 9 9 9 9 9 9 9 9 9 10 11 12 13 14 15 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 18 19 20
第一眼似乎没有规律,但是可以发现每个数字都出现了一次及以上,且单调不减,所以把每个数字出现的次数统计一下(缩表)。
2
2
3
1
5
1
1
1
9
1
1
1
1
1
1
1
17
1
1
1
可以发现,令接下来第
接下来就容易一些了。举个例子,
5
1
1
1
9
1
1
1
1
1
1
1
17
1
1
1
去掉了
因为
5
1
1
1
再把表扩展开:
5 5 5 5 5 6 7 8
找到第二项
对于其他的
特判:
代码:
#include<bits/stdc++.h>
using namespace std;
#define int unsigned long long
int n;
signed main(){
cin>>n;
if(n<=2) return printf("1\n"),0;
int x=log2(n);
int y=pow(2,x);
n-=y;
y/=2;
if(n<=y+1) cout<<y+1;
else cout<<y+1+(n-(y+1));
return 0;
}
时间复杂度