2017-5-20-Train: 喵哈哈村的魔法考試 Round #17 (Div.2)
描述
喵哈哈村的一堆人在前往北京的路上,發現了一個洞穴。由於好奇心大作,於是準備前往洞穴進行探險。
但是有一些人並不願意前往洞穴,於是他們決定玩以下遊戲,來看是否能夠去秘境探險:
這兒有n個數,如果所有數的乘積是k的倍數,那麽就去探險,否則就不去。
現在問你是否會去。
輸入
本題包含若幹組測試數據。第一行兩個整數n,k,表示數的個數,和k。第二行n個整數,a[i]。滿足1<=n<=1000,1<=k,a[i]<=1e6
輸出
如果要去的話,輸出Yes,否則輸出N
樣例輸入1
復制
3 5 1 2 4 3 8 1 2 4
樣例輸出1
No Yes
Solve:
直接按照模的性質來就好了
Code:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 LL n , k , x; 5 LL ans; 6 int main() 7 { 8 while(~scanf("%lld%lld" , &n , &k)) 9 { 10 ans = 1; 11 for(int i = 1 ; i <= n ; ++i)View Code12 { 13 scanf("%lld" , &x); 14 ans = ans * x % k; 15 } 16 if(!ans) 17 puts("Yes"); 18 else 19 puts("No"); 20 } 21 22 return 0; 23 }
描述
喵哈哈村的一堆人在前往北京的路上,發現了一個洞穴。由於好奇心大作,於是準備前往洞穴進行探險。
秘境探險的第一關,是答對秘境門口的招牌上的問題。
招牌上的問題這樣寫道:
我想每次查詢區間的異或值,請你幫幫我。
輸入
本題包含若幹組測試數據。第一行一個n,表示有n個數。第二行n個整數,表示每個數a[i]第三行一個q,表示查詢的個數。接下來q行,每行l,r,表示要查詢的區間。滿足1<=n,q<=1e5 0<=a[i]<=1e6 1<=l<=r<=n
輸出
對於每組詢問,輸出答案。
樣例輸入1
復制
3 1 2 3 3 1 1 2 2 1 3
樣例輸出1
1 2 0
Solve:
處理前綴異或,查詢像前綴和那樣查詢就行了
Code:
1 #include <bits/stdc++.h> 2 using namespace std; 3 static const int MAXN = 1e5 + 10; 4 typedef long long LL; 5 LL pre[MAXN]; 6 int n , q; 7 8 int main() 9 { 10 while(~scanf("%d" , &n)) 11 { 12 for(int i = 1 ; i <= n ; ++i) 13 { 14 scanf("%lld" , &pre[i]); 15 pre[i] ^= pre[i - 1]; 16 } 17 18 scanf("%d" , &q); 19 while(q--) 20 { 21 int x , y; 22 scanf("%d%d" , &x , &y); 23 printf("%lld\n" , pre[y] ^ pre[x - 1]); 24 } 25 } 26 }View Code
描述
喵哈哈村的一堆人在前往北京的路上,發現了一個洞穴。由於好奇心大作,於是準備前往洞穴進行探險。
洞穴裏面沒想到別有一番風景,但是這個風景好像有一些神秘。
我們可以把風景看作一個n*n的地圖,每個點有它的初始高度。有一個小球,它只能從高處往低處滑【嚴格大於】。但是由於地勢經常變動,高度經常變化;同時,喵哈哈村發現,有些位置會不能滑動。
現在,給出每個n*n個點的初始高度,並給出m個命令:
C a b c表示坐標為a,b的點的高度改為c;
S a b c d表示左上角為a,b右下角為c,d的矩形地區不能繼續經過;
B a b c d表示左上角為a b,右下角為c d的矩形地區可以經過;
Q表示詢問現在該風景小球可以走的最長路徑為多少。對於每個Q要作一次回答。
輸入
第一行n,第二行開始n*n的地圖,意義如上;接下來一個m,然後是m個命令,如上1<=n<=700;1<=m<=1000000;其中Q、S、B操作分別<=100;題中所有數據不超過2*10^9的正整數
輸出
對於每個Q,輸出答案。
樣例輸入1
復制
5 1 2 3 4 5 10 9 8 7 6 11 12 13 14 15 20 19 18 17 16 21 22 23 24 25 5 C 1 1 3 Q S 1 3 5 5 S 3 1 5 5 Q
樣例輸出1
24 3
Solve:
經典滑雪問題,直接暴力修改,數據不大
Code:
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define CLR(x , v) memset(x , v , sizeof(x)) 5 6 static const int MAXN = 800; 7 static const int dirx[4] = {1 , 0 , -1 , 0}; 8 static const int diry[4] = {0 , 1 , 0 , -1}; 9 10 bool vis[MAXN][MAXN]; 11 int data[MAXN][MAXN]; 12 int dp[MAXN][MAXN]; 13 int n , m; 14 15 int Dfs(int x , int y) 16 { 17 if(vis[x][y]) 18 return 0; 19 20 if(dp[x][y]) 21 return dp[x][y]; 22 23 dp[x][y] = 1; 24 25 for(int i = 0 ; i < 4 ; ++i) 26 { 27 int nx = x + dirx[i] , ny = y + diry[i]; 28 29 if(nx > n || ny > n || nx < 1 || ny < 1) 30 continue; 31 32 if(data[nx][ny] >= data[x][y]) 33 continue; 34 35 dp[x][y] = max(dp[x][y] , Dfs(nx , ny) + 1); 36 } 37 38 return dp[x][y]; 39 } 40 41 int main() 42 { 43 scanf("%d" , &n); 44 for(int i = 1 ; i <= n ; ++i) 45 { 46 for(int j = 1 ; j <= n ; ++j) 47 { 48 scanf("%d" , &data[i][j]); 49 } 50 } 51 52 scanf("%d" , &m); 53 while(m--) 54 { 55 char cmd[3] = {‘\0‘}; 56 int a , b , c , d; 57 scanf(" %s" , cmd); 58 if(cmd[0] == ‘Q‘) 59 { 60 int ans = 0; 61 memset(dp , 0 , sizeof(dp)); 62 for(int i = 1 ; i <= n ; ++i) 63 { 64 for(int j = 1 ; j <= n ; ++j) 65 { 66 ans = max(ans , Dfs(i , j)); 67 } 68 } 69 70 printf("%d\n" , ans); 71 } 72 else if(cmd[0] == ‘S‘) 73 { 74 scanf("%d%d%d%d" , &a , &b , &c , &d); 75 for(int i = a ; i <= c ; ++i) 76 { 77 for(int j = b ; j <= d ; ++j) 78 { 79 vis[i][j] = 1; 80 } 81 } 82 } 83 else if(cmd[0] == ‘B‘) 84 { 85 scanf("%d%d%d%d" , &a , &b , &c , &d); 86 for(int i = a ; i <= c ; ++i) 87 { 88 for(int j = b ; j <= d ; ++j) 89 { 90 vis[i][j] = 0; 91 } 92 } 93 } 94 else 95 { 96 scanf("%d%d%d" , &a , &b , &c); 97 data[a][b] = c; 98 } 99 } 100 }View Code
2017-5-20-Train: 喵哈哈村的魔法考試 Round #17 (Div.2)