EducationalCodeforcesRound62(Div. 2)(A-D题解)
http://codeforces.com/contest/1140/problem/A
題意:一個(gè)人看一本解謎書,第 i 個(gè)謎題的答案在第 ai 頁,他會(huì)從頭一頁一頁地翻書,如果今天他看過的所有謎題的答案頁他都看過了,那么今天就不看了,否則就要一直往下翻。求解這本書多長(zhǎng)時(shí)間看完。
思路:模擬即可,不斷更新今天看過謎題的答案的最大頁碼。(這破題也能WA,真的是菜。。。)
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int a[10005]; 5 int main() 6 { 7 int n; 8 cin >> n; 9 for(int i = 1;i <= n;i ++){ 10 cin >> a[i]; 11 } 12 int ans = 0; 13 int now = 1; 14 while(now <= n){ 15 int maxx = a[now]; 16 while(now != maxx){ 17 now ++; 18 maxx = max(a[now],maxx); 19 } 20 now ++; 21 ans ++; 22 } 23 cout << ans << endl; 24 25 return 0; 26 } A?
?
http://codeforces.com/contest/1140/problem/B
題意:給一個(gè)只含有 '<' 和 '>' 的字符串,如果你經(jīng)過若干操作能把它的長(zhǎng)度變成 1,那么這個(gè)串就是好串。
操作包含兩個(gè):1、隨便拿出一個(gè) '<' ,然后刪除在它左邊的所有字符,不包括它本身。
2、隨便拿出一個(gè) '>' ,然后刪除在它右邊的所有字符,不包括它本身。
你現(xiàn)在可以直接不通過操作刪除任意個(gè)字符,問你在最少刪除多少個(gè)字符后,這個(gè)串變成好串。
思路:挺坑的一道題,一看是看錯(cuò)問題以為是括號(hào)匹配,WA了之后就沒思路了。但是想了一會(huì)發(fā)現(xiàn),只要從左找第一個(gè)右括號(hào),并且從右找到第一個(gè)左括號(hào),看看誰先出現(xiàn)就行了。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 char a[10005]; 5 int main() 6 { 7 int T; 8 cin >> T; 9 while(T --){ 10 int n;cin >> n; 11 scanf("%s",a); 12 for(int i = 0;i < n;i ++){ 13 if(a[i] == '>'){cout << i << endl;break;} 14 if(a[n - i - 1] == '<'){cout << i << endl;break;} 15 } 16 } 17 18 return 0; 19 } B?
?
http://codeforces.com/contest/1140/problem/C
題意:給定n,k,然后給定 n 對(duì)數(shù)字 ai,bi。ai 代表一首歌的長(zhǎng)度,bi 代表一首歌的幸福值。要求從這 n should歌里面找到不大于 k 首,使得這個(gè)歌單的權(quán)值最大。
一個(gè)歌單的權(quán)值是個(gè)單種所有歌曲的總長(zhǎng)乘以歌單中最小幸福值。
思路:一開始用的就是貪心,按照幸福值從低到高結(jié)構(gòu)體排序,然后枚舉,但是WA掉了。最后找到了一個(gè)問題,就是沒有處理長(zhǎng)度這個(gè)變量 ,對(duì)于一個(gè)已經(jīng)有的歌單,下一步加入了一個(gè)新的幸福值,但是不一定就要拋棄最小的幸福值,應(yīng)該拋棄的是最小的長(zhǎng)度。
所以將隊(duì)列改成可以排序的優(yōu)先隊(duì)列維護(hù)歌單就能AC了。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 struct Node{ 5 int L;int H; 6 friend bool operator<(Node a,Node b){return a.L > b.L;} 7 }a[300005]; 8 9 bool cmp(Node a,Node b){ 10 if(a.H == b.H){return a.L < b.L;} 11 return a.H > b.H; 12 } 13 14 int main() 15 { 16 int n,m; 17 cin >> n >> m; 18 for(int i = 0;i < n;i ++){ 19 cin >> a[i].L >> a[i].H; 20 } 21 sort(a,a + n,cmp); 22 priority_queue<Node> Q; 23 // for(int i = 0;i < n;i ++){ 24 // cout << a[i].L << " " << a[i].H << endl; 25 // } 26 long long sum = 0; 27 long long ans = 0; 28 for(int i = 0;i < n;i ++){ 29 Q.push(a[i]); 30 sum += a[i].L; 31 if(Q.size() > m){ 32 sum -= Q.top().L; 33 Q.pop(); 34 } 35 //cout << a[i].H << " " << sum <<endl; 36 ans = max(ans,sum * a[i].H); 37 } 38 cout << ans << endl; 39 40 return 0; 41 } C?
?
http://codeforces.com/contest/1140/problem/D
題意:給一個(gè)定義為正多邊形的權(quán)重:在一個(gè)正 n 邊形內(nèi),將所有頂點(diǎn)依次標(biāo)記為 1,2,3...n 。然后再中間畫出 n - 2 條不相交的對(duì)角線,那么一個(gè)三角形的權(quán)重就是三點(diǎn)標(biāo)記值的乘積,這個(gè)多邊形的權(quán)重就是所有三角形權(quán)重的和。求解最小正 n 邊形權(quán)重。
思路:我認(rèn)為這題應(yīng)該是A題。。。只要讀懂題就能過。公共頂點(diǎn)一定是 1 ,不斷的加上 i * (i + 1) 就行了。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 5 int main() 6 { 7 int n; 8 cin >> n; 9 long long ans = 0; 10 for(int i = 2;i <= n - 1;i ++){ 11 ans += i * i + i; 12 } 13 cout << ans << endl; 14 15 return 0; 16 } D?
轉(zhuǎn)載于:https://www.cnblogs.com/love-fromAtoZ/p/10657235.html
總結(jié)
以上是生活随笔為你收集整理的EducationalCodeforcesRound62(Div. 2)(A-D题解)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POST一下就知道:人生苦短,我用Pyt
- 下一篇: AHOI(十二省联考)2019 退役记