P1076 寻宝
Posted garen-wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1076 寻宝相关的知识,希望对你有一定的参考价值。
水古董题也不轻松。。。
题目都这么说了,就照它的意思去模拟吧。
但是注意:(0 leq x leq 100000),不优化是会T的。但是优化也非常容易。
只需要记录下每一层楼有梯子的房间数cnt[i]即可。
然后多余的数就是在重复转圈,删除掉即可。
后来发现不能直接取模,在整除的时候加个特判就ok了。
话说没有讨论区的样例解释我是看不懂的。
代码:
#include<cstdio>
const int maxn = 10005, maxm = 105;
const int mod = 20123;
int a[maxn][maxm];
bool b[maxn][maxm];
int cnt[maxn];//一层楼有多少个
int n, m, ans;
int read()
{
int ans = 0, s = 1;
char ch = getchar();
while(ch > ‘9‘ || ch < ‘0‘)
{
if(ch == ‘-‘) s = -1;
ch = getchar();
}
while(ch >= ‘0‘ && ch <= ‘9‘)
{
ans = ans * 10 + ch - ‘0‘;
ch = getchar();
}
return s * ans;
}
int main()
{
//freopen("in.txt", "r", stdin);
n = read(), m = read();
for(int i = 1; i <= n; i++)
{
for(int j = 0; j < m; j++)
{
b[i][j] = read(), a[i][j] = read();
if(b[i][j]) cnt[i]++;
}
}
int now = read();
for(int i = 1; i <= n; i++)
{
int num = a[i][now];
ans = (ans + num) % mod;
if(num % cnt[i] == 0) num = cnt[i];
else num = num % cnt[i];
while(num)
{
if(b[i][now])
{
num--;
if(num == 0) break;
}
now++;
if(now >= m) now -= m;
}
}
printf("%d
", ans % mod);
return 0;
}
以上是关于P1076 寻宝的主要内容,如果未能解决你的问题,请参考以下文章