2019 年 CSP 模擬練習賽9.16

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

1. 矩陣遊戲


(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。

遊戲

2. 割韭菜

(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

 

 3.翻硬幣

 

(coins.pas/c/cpp)
【問題描述】
何老闆給你一棵由 n 個節點構成的樹,節點編號 1 到 n,其中 1 號點爲根。每一個節點上都有一枚硬幣,
硬幣一面是頭像一面是金額,一開始全部硬幣都是頭像朝上。
接下來何老闆進行了 m 次操做,操做分兩種:
0 號操做: 將一枚硬幣翻轉
1 號操做: 指定節點與全部金額朝上節點求 LCA,找出其中深度最大一個 LCA 的編號
【輸入格式】
1 行,兩個正整數 nm
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

程序

相關文章
相關標籤/搜索