题面 ↓
http://codevs.cn/problem/1314/、
注意一点 不是每个房间都有楼梯,所以代码有注释
#include <iostream>
#include <cstdio>
using namespace std;
struct ha
{
int lt,x;
}fj[100000+5][100+5];
int yc[100000+5];
int n,m,ks,ans=0;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=0;j<=m-1;j++)
{
scanf("%d%d",&fj[i][j].lt,&fj[i][j].x);
yc[i]+=fj[i][j].lt;
}
}
scanf("%d",&ks);
for(int i=1;i<=n;i++)
{
ans+=fj[i][ks].x;
ans%=20123; //一边加一遍%
int t=fj[i][ks].x;
t%=yc[i];
if(t==0) t+=yc[i]; //这个地方当t==0的时候找这层最后一个有楼梯的房间上去,不是它本身。
while (1) //while模拟不要用for
{
if(fj[i][ks].lt==1)
t--;
if(t==0)
break;
ks++;
if(ks>m) ks=0;
}
}
printf("%d",ans%20123);
return 0;
}