2019 年 CSP 模擬練習賽
3.0 小時完成
(請選手務必仔細閱讀本頁內容)
函數
題目名稱 | 矩陣遊戲 | 割韭菜 | 翻硬幣 |
程序文件名 | matrixgame | leeks | coins |
輸入文件名 | matrixgame.in | leeks.in | coins.in |
輸出文件名 | matrixgame.out | leeks.out | coins.out |
每一個測試點時限 | 1 sec | 2 sec | 1 sec |
測試點數目 | 10 | 10 | 10 |
每一個測試點分值 | 10 | 10 | 10 |
內存限制 | 256m | 256m | 256m |
題目類型 | 傳統型 | 傳統型 | 傳統型 |
提交源程序文件名:
測試
對於 Pascal 語言 | matrixgame.pas | leeks.pas | coins.pas |
對於 C 語言 | matrixgame.c | leeks.c | coins.c |
對於 C++ 語言 | matrixgame.cpp | leeks.cpp | coins.cpp |
注意事項
一、文件名(程序名和輸入輸出文件名)必須使用小寫。
二、除非特殊說明,結果比較方式均爲忽略行末空格及文末回車的全文比較。
三、 C/C++中函數 main()的返回值類型必須是 int,程序正常結束時的返回值必須是 0
spa
(matrixgame.pas/c/cpp)
【問題描述】
何老闆有一個 N 行 M 列的數字矩陣。
第一行的數字是 1,2,3,...,M
第二行的數字是 M+1,M+2,M+3,...,2*M
第三行的數字是 2*M+1,2*M+2,2*M+3,...,3*M
以此類推,第 N 行的數字是(N-1)*M+1,(N-1)*M+2,(N-1)*M+3,...,N*M 。
例如,N=3,M=4 的矩陣是這樣的:
1 2 3 4
5 6 7 8
9 10 11 12
如今何老闆要改造這個矩陣,改造會進行 K 次,每次改造會將矩陣的某一行或某一列乘上
一個數字。
你的任務是計算最終這個矩陣內全部數字的和,輸出答案對 109+7 取模。
【輸入格式】
第一行包含三個正整數 N、 M、 K,表示矩陣的大小與改造次數。接下來的 K 行,每行會
是以下兩種形式之一:
R X Y,表示將矩陣的第 X(1 ≤ X ≤ N)行變爲原來的 Y(0 ≤ Y ≤ 109)倍.
S X Y,表示將矩陣的第 X(1 ≤ X ≤ M)列變爲原來的 Y(0 ≤ Y ≤ 109)倍.
【輸出格式】
輸出一行一個整數,表示最終矩陣內全部元素的和對 109+7 取模。
【輸入輸出樣例】
orm
樣例輸入 1 | 樣例輸入 2 |
3 4 4 R 2 4 S 4 1 R 3 2 R 2 0 |
2 4 4 S 2 0 S 2 3 R 1 5 S 1 3 |
樣例輸出 1 | 樣例輸出 2 |
94 | 80 |
【樣例 1 解釋】
操做結束以後矩陣會變成這樣:
1 2 3 4
0 0 0 0
18 20 22 24
【數據範圍】
40%的數據知足: 1≤N,M≤1000;
80%的數據知足: 1≤N,M≤1000000,1 ≤ K ≤10000;
100%的數據知足: 1≤N,M≤1000000,1 ≤ K ≤100000。
遊戲
(leeks.pas/c/cpp)
【問題描述】
何老闆有一個農場,農場可看做 N*M 的方格,每一個方格都是一塊韭菜田。
每塊田都長有必定數量的韭菜。其中座標爲(i,j)的田,即第 i 行,第 j 列的這塊田長有
Aij公斤韭菜。
何老闆打算從座標爲(X,Y)的田出發,沿上下左右四個方向移動,每到達一塊田,何老闆
會割走該田全部韭菜。 若當前何老闆位於座標爲(i,j)的田,他收割到的韭菜爲 Aij公斤,當
何老闆離開該田後,該田又會當即長出 Aij公斤韭菜。
何老闆今天打算移動 T 步,最後剛好回到起點(X,Y)。問,何老闆最多能收割多少公斤韭
菜。
【輸入格式】
第一行:5 個正整數 N,M,X,Y,T。
接下來 N 行, 每行 M 個非負整數, 表明農場, 其中第 i 行第 j 列表示 Aij
數據保證 AXY=0, 且 T 爲偶數
【輸出格式】
一個整數,表示能收割到的最多韭菜公斤數
【輸入輸出樣例】
內存
樣例輸入 1 | 樣例輸入 2 | 樣例輸入 3 |
2 2 1 1 2 0 1 2 10 |
2 2 1 1 4 0 5 5 10 |
3 3 2 2 6 5 1 0 1 0 3 1 3 3 |
樣例輸出 1 | 樣例輸出 2 | 樣例輸出 3 |
2 | 20 | 15 |
【數據範圍】
對於 30% 的數據, 1≤T≤10000
對於 100% 的數據, 1≤N,M≤100 2 ≤T≤109 0≤Aij≤109
table
(coins.pas/c/cpp)
【問題描述】
何老闆給你一棵由 n 個節點構成的樹,節點編號 1 到 n,其中 1 號點爲根。每一個節點上都有一枚硬幣,
硬幣一面是頭像一面是金額,一開始全部硬幣都是頭像朝上。
接下來何老闆進行了 m 次操做,操做分兩種:
0 號操做: 將一枚硬幣翻轉
1 號操做: 指定節點與全部金額朝上節點求 LCA,找出其中深度最大一個 LCA 的編號
【輸入格式】
第 1 行,兩個正整數 n, m
第 2 行, 共 n-1 個正整數, 其中第 i 個正整數表示 i+1 號結點的父親
接下來 m 行, 每行一個整數 x , |x|表示被操做的節點編號, x>0 爲 0 號操做, 不然爲 1
號操做。
【輸出格式】
對於每一個 1 號的操做輸出對應的節點編號,若樹上沒有金額朝上的硬幣,輸出 0。
【輸出輸出樣例】
class
樣例輸入 1 | 樣例輸入 2 |
10 10 6 2 7 9 1 10 5 4 3 -2 2 -2 3 -5 8 1 4 -1 -5 |
25 12 1 2 2 2 2 2 2 3 8 7 6 8 11 8 14 13 11 12 14 14 17 20 19 20 6 16 -5 8 25 2 - 17 7 -8 - 23 18 -12 |
樣例輸出 1 | 樣例輸出 2 |
0 2 3 1 5 | 2 8 8 20 6 |
【數據範圍】
50%的數據 1<=n,m<=3000
100%的數據 1<=n,m<=300000
程序