专栏文章

题解:P1076 [NOIP2012 普及组] 寻宝

P1076题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqkild3
此快照首次捕获于
2025/12/04 06:17
3 个月前
此快照最后确认于
2025/12/04 06:17
3 个月前
查看原文

题意

告诉你每层的房间数,依靠指示牌的数字找到上一层的房间即可

思路

只要一层一层的模拟每个房间即可,我们从 jj 号屋爬到的一定是下一层的 jj 号屋。我们用变量 pospos 来存储位置。 但是暴力肯定会超时,因为数据很大,所以我们发现了周期,用找的次数模楼层门数即可,但是如果号码为该层楼梯门个数,也就是余数为零,为保证正确性,加一再模即可,建议使用 scanf 呦,超时了别怪我

代码

CPP
#include <bits/stdc++.h>
using namespace std;
const int size=20123;
long long al = 0;
int k;
int s[10001][101], a[10001][101];
int n, m;
int main() {
	cin >> n >> m;
	int sum = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j < m; j++) {
			scanf("%d%d", &s[i][j], &a[i][j]);
			if (s[i][j] == 1) {
				sum++;
			}
		}
	}
	cin >> k;
	for (int i = 1; i <= n; i++) {
		int x = a[i][k];
		al = (al + x) % size;
		int t = 0;
		for (int j = 0; j < m; j++) {
			t += s[i][j];
		}
		x %= t;
		if (x == 0) {
			x = t;
		}
		if (s[i][k]) {
			x--;
		}
		while (x) {
			k = (k + 1) % m;
			if (s[i][k]) {
				x--;
			}
		}
	}
	cout << al % size;
	return 0;
}
如有任何问题请在评论区@我,管理大大求过!

评论

0 条评论,欢迎与作者交流。

正在加载评论...