牛客小白月赛17
題目鏈接:https://ac.nowcoder.com/acm/contest/1085#question
A:
題意:一個數(shù)軸,再給定m個區(qū)間,問沒被區(qū)間覆蓋的最大連續(xù)區(qū)間是多大
idea:按左端點(diǎn)為第一關(guān)鍵字排序,然后區(qū)間合并,從左到右再遍歷一遍即可
1 void View CodeB:
題意:詢問每個點(diǎn)周圍有多少炸彈
idea:暴力遍歷
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 int n, m, cnt[1010][1010]; 5 char a[1010][1010]; 6 7 int main() 8 { 9 cin >> n >> m; 10 for (int i = 0; i < n; i ++ ) 11 for (int j = 0; j < m; j ++ ) 12 cin >> a[i][j]; 13 14 for (int i = 0; i < n; i ++ ) 15 { 16 for (int j = 0; j < m; j ++ ) 17 { 18 int ans = 0; 19 if (a[i][j] == '.') 20 { 21 if (a[i - 1][j] == '*') ans ++ ; 22 if (a[i - 1][j - 1] == '*') ans ++ ; 23 if (a[i - 1][j + 1] == '*') ans ++ ; 24 if (a[i][j - 1] == '*') ans ++ ; 25 if (a[i][j + 1] == '*') ans ++ ; 26 if (a[i + 1][j + 1] == '*') ans ++ ; 27 if (a[i + 1][j - 1] == '*') ans ++ ; 28 if (a[i + 1][j] == '*') ans ++ ; 29 } 30 cnt[i][j] = ans; 31 } 32 } 33 34 for (int i = 0; i < n; i ++ ) 35 { 36 for (int j = 0; j < m; j ++ ) 37 { 38 if (a[i][j] == '*') cout << "*"; 39 else cout << cnt[i][j]; 40 } 41 cout << endl; 42 } 43 return 0; 44 } View CodeC:
題意:給出一個數(shù)組,計算出現(xiàn)次數(shù)為奇數(shù)次的數(shù)的異或和
idea:根據(jù)異或和的性質(zhì),把所有數(shù)全部異或計算即可
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 5 using namespace std; 6 int n; 7 8 int main() 9 { 10 scanf("%d",&n); 11 int ans = 0; 12 for (int i = 0; i < n; i ++ ) 13 { 14 int x; 15 scanf("%d",&x); 16 ans ^= x; 17 } 18 printf("%d",ans); 19 return 0; 20 } View CodeD:
題意:解密,給出一段密文,輸出解密后的字符串
idea:C≡k1??x+k2?(mod??26),因?yàn)榭偣簿?6個字母,所以可以先打表,預(yù)處理出來每個密文對應(yīng)的明文
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 int cnt[30]; 5 6 int main() 7 { 8 int k1, k2; 9 cin >> k1 >> k2; 10 for (int i = 0; i <26; i ++ ) 11 { 12 for (int j = 0; j < 26; j ++ ) 13 { 14 if ((k1 * j + k2) % 26 == i) 15 { 16 cnt[i] = j; 17 break; 18 } 19 } 20 } 21 string s; 22 cin >> s; 23 int len = s.size(); 24 for (int i = 0; i < len; i ++ ) 25 { 26 if (s[i] >= 'a' && s[i] <= 'z') 27 { 28 int c = s[i] - 'a'; 29 printf("%c",cnt[c] + 'a'); 30 } 31 else 32 { 33 int c = s[i] - 'A'; 34 printf("%c",cnt[c] + 'A'); 35 } 36 } 37 return 0; 38 } View CodeI:
題意:電梯上升一層需要一秒,問到你這層至少需要多少秒
idea:簽到,直接算就行
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 const int MAXN = 1e6 + 10; 6 int n, k, a[MAXN]; 7 8 int main() 9 { 10 cin >> n >> k; 11 for (int i = 0; i < n; i ++ ) scanf("%d",&a[i]); 12 13 int ans = 0; 14 for (int i = 0; i < n; i ++ ) 15 { 16 if (a[i] > k && a[i] > ans) ans = a[i]; 17 } 18 ans = (ans - k) * 2 + k - 1; 19 cout << ans << endl; 20 return 0; 21 } View Code?
PS:四題半,挺糟糕的,下次一定要五題,就這樣。
轉(zhuǎn)載于:https://www.cnblogs.com/chuyds/p/11527603.html
總結(jié)
- 上一篇: 爬取了BAT等一线大厂近10000+招聘
- 下一篇: 一文讲透Dubbo负载均衡之最小活跃数算