1 solutions
-
0
C++ :
#include<bits/stdc++.h> using namespace std; #define N 10005 #define M 105 int n, m, ans; int x[N][M];//x[i][j]:第i层第j房间的标牌号,表示逆时针方向选择第x[i][j]房间可以上楼 int upNum[N];//upNum[i]:第i层有几个有楼梯的房间 int isUp[N][M];//isUp[i][j]:第i层第j房间是否有楼梯 int main() { scanf("%d %d", &n ,&m); for(int i = 1; i <= n; ++i) for(int j = 0; j < m; ++j) { scanf("%d %d", &isUp[i][j], &x[i][j]); if(isUp[i][j])//统计第i层有楼梯的房间数量 upNum[i]++; } int j, roomNum;//roomNum:需要选择有楼梯的房间的最少次数 scanf("%d", &j);//起始房间号 for(int i = 1; i <= n; ++i) { ans = (ans + x[i][j]) % 20123;//一边加一边取模 if(x[i][j] % upNum[i] == 0)//求出需要选择房间的最少次数 roomNum = upNum[i]; else roomNum = x[i][j] % upNum[i]; int k = 0;//看过的有楼梯的房间数 if(isUp[i][j]) k++; while(k < roomNum)//循环结束后,j指向第roomNum个房间,进入上一层的j房间 { j = (j + 1) % M;//循环遍历数组,M-1的下一个位置是0 if(isUp[i][j])//如果j房间有楼梯 k++; } } cout << ans; return 0; }
- 1
Information
- ID
- 9181
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By