CodeForces 670B Game of Robots(第k个出现的数字)

http://codeforces.com/problemset/problem/670/B

B. Game of Robots
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

In late autumn evening n robots gathered in the cheerful company of friends. Each robot has a unique identifier — an integer from 1 to109.

At some moment, robots decided to play the game "Snowball". Below there are the rules of this game. First, all robots stand in a row. Then the first robot says his identifier. After that the second robot says the identifier of the first robot and then says his own identifier. Then the third robot says the identifier of the first robot, then says the identifier of the second robot and after that says his own. This process continues from left to right until the n-th robot says his identifier.

Your task is to determine the k-th identifier to be pronounced.

Input

The first line contains two positive integers n and k (1 ≤ n ≤ 100 0001 ≤ k ≤ min(2·109, n·(n + 1) / 2).

The second line contains the sequence id1, id2, ..., idn (1 ≤ idi ≤ 109) — identifiers of roborts. It is guaranteed that all identifiers are different.

Output

Print the k-th pronounced identifier (assume that the numeration starts from 1).

Examples
input
2 2
1 2
output
1
input
4 5
10 4 18 3
output
4
Note

In the first sample identifiers of robots will be pronounced in the following order: 112. As k = 2, the answer equals to 1.

In the second test case identifiers of robots will be pronounced in the following order: 1010410418104183. As k = 5, the answer equals to 4.




题意:

n 个机器(标号唯一)人站一列按照一定的规则进行报号游戏,问报出的第 k 个编号是什么。

规则:

第一个报自己的编号;

第二个机器人报前一个机器人和自己的编号;

第三个机器人报前两个机器人和自己的编号;

..........

第 n 个机器人报前 n-1 个机器人和自己的编号。

例如 n=4 :1 2 3 4,k=3  ->  1,1 2,1 2 3, 1 2 3 4  答案是ans = 2.


思路:参考自官方题解。

如图所示求解样例

CodeForces 670B Game of Robots(第k个出现的数字)_第1张图片


Code:

#include
const int MYDD=1e5+1103;

int robot[MYDD];

int main() {
	int n,k;
	while(scanf("%d%d",&n,&k)!=EOF) {
		for(int j=1; j<=n; j++)
			scanf("%d",&robot[j]);
		for(int i=1; i<=n; i++) {
			if(k-i>0)	k=k-i;
			else		break;
		}
		
//		printf("%d********\n",k);
		printf("%d\n",robot[k]);
	}
	return 0;
}




你可能感兴趣的:(小有趣的思维数学,CodeForces)