时间:2016-05-06 10:09:35 星期五
题目编号:[2016-05-06][codeforces][670B - Game of Robots]
题目大意:给定n和k,和n个人的编号,从做到右,每个人一次报出前面的人的编号和自己的编号,问第k个喊出的编号是多少
分析:
- 暴力计算出k是第几个人,记为t,那么 第k个人喊的编号就是 k−t×(t−1)2
- 直接不断减i ,i从1增加到 n,知道 k - i <= 0为止
#include<cstdio>using namespace std;const int maxn = 1E5 + 10;int a[maxn];int main(){ int n,m; scanf("%d%d",&n,&m); for(int i = 1 ; i <= n ; ++i){ scanf("%d",&a[i]); } a[0] = a[n]; for(int i = 1 ;m - i > 0; ++i){ m -= i; } printf("%d\n",a[m]);}
#include<cstdio>using namespace std;const int maxn = 1E5 + 10;int a[maxn];int main(){ int n,m; scanf("%d%d",&n,&m); for(int i = 0 ; i < n ; ++i){ scanf("%d",&a[i]); } long long i = 0,k = m; for(i = 0 ; i < maxn ; ++i){ if( 2 * k >= i * (i - 1) && 2 * k<= (1 + i) * i) break; } int ans = k - i * (i - 1) / 2; printf("%d\n",a[ans - 1]);}