?
//
输出
输出只有一行,一个整数,表示打开宝箱的密钥,这个数可能会很大,请输出对20123取模的结果即可。
样例输入 Copy
2 3
1 2
0 3
1 4
0 1
1 5
1 2
1
样例输出 Copy
5
// B
#include<bits/stdc++.h>
using namespace std;
// 0<N≤10000,0<M≤100,0<x≤1,000,000
const int MOD=20123;
const int N=1e4+5;
const int M=111;
const int X=1e6+7;
typedef struct room
{
int to,num;
}T;
T a[N][M];
int one[N]; // 取模数
int main()
{
int n,m,i,j,cnt,temp,ans;
while( ~scanf("%d%d",&n,&m) )
{
for( i=0;i<n;i++ )
{
cnt=0;
for( j=0;j<m;j++ )
{
scanf("%d%d",&a[i][j].to,&a[i][j].num);
if( a[i][j].to==1 ) cnt++;
}
one[i]=cnt;
}
scanf("%d",&j);
for( ans=i=0;i<n;i++ )
{
temp=a[i][j].num;
ans=( ans+temp )%MOD;
temp%=one[i];
if( temp==0 ) temp=one[i]; // 2%2==0
while( temp )
{
if( a[i][j].to==1 ) temp--;
if( temp ) j=(j+1)%m; // 从j号房间到上一层 一定也是j号房间 ( j++ RE )
}
}
printf("%d\n",ans);
}
return 0;
}
|