CF1481B New Colony 题解

Content

\(n\) 座山排成一行,其中第 \(i\) 座山的高度为 \(h_i\)

\(k\) 个巨石依次从第一座山开始滚落。当某个巨石在第 \(i\) 座山时:

  • 如果 \(i=n\),那么巨石直接消失。
  • 否则,如果 \(h_i\geqslant h_{i+1}\),那么巨石继续滚落。
  • 否则,巨石将在第 \(i\) 座山停下,并使得 \(h_i\) 增加 \(1\)

请求出第 \(k\) 个巨石最终会落在哪座山上。

数据范围:\(t\) 组数据,\(1\leqslant t,n,h_i\leqslant 100\)\(\bf 1\leqslant k\leqslant 10^9\)

Solution

你以为这道题目 \(k\)\(10^9\) 级别就不可做了?事实上 \(k\) 到了一定的范围时,后面的巨石就会滚到第 \(n\) 座山然后全部消失。于是我们对于不会消失的巨石直接模拟求出它落在的山的编号,一旦碰到会消失的巨石就直接不用做后面的模拟,因为如上文所述,后面的巨石会滚到第 \(n\) 座山然后全部消失。

Code

namespace Solution {
	const int N = 107;
	int n, k, h[N];

	iv Main() {
		MT {
			read(n, k);
			F(int, i, 1, n) read(h[i]);
			int ans = 0;
			while(k--) {
				int fl = 0;
				F(int, i, 1, n) {
					if(i == n) {fl = 1; break;}
					if(h[i] < h[i + 1]) {h[i]++, ans = i; break;}
				}
				if(fl) {ans = -1; break;}
			}
			println(ans);
		}
		return;
	}
}

posted @ 2021-12-15 21:12  Eason_AC  阅读(45)  评论(0)    收藏  举报