2020.10.02 Rating 補題報告
阿新 • • 發佈:2020-10-10
A - Remove a Progression
題意:給出一個長度,構造一個1,2,3……,n 的數列,第i步去掉第i個奇數,之後剩下的數構成一個新數列,問最後第x個數是多少
做法:好傢伙一開始寫了一大串子,結果啥用都沒有,在紙上打表看看,結果不正好就是2*x嗎……
程式碼:
//去吧馬里奧!把AC公主救回來! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******######// ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; //int a[100000005]; int main(){ int t; cin >> t; while(t--){ int n,x; cin >> n >> x;/* int m = 1; for(int i = 1; i <= n;i++){ a[i] = i; } int count = 0; for(int i = 1;i <= n;i++){ if(a[i] % 2 == 1){ a[i] = -1; count++; } if((n - count) < i){ break; } } //for(int i = 1;i <= n;i++){ // cout << a[i] << endl; //} int num = 0; for(int i= 1;i <= n;i++){ if(a[i] == -1){ continue; }else{ num++; if(num == x){ cout << a[i] << endl; break; }else{ continue; } } } */ cout << x*2 << endl; } }
B - Yet Another Crosses Problem
題意:給出一個圖,裡面有白塊和黑塊,現在可以把白塊塗成黑的,問最少操作幾步可以塗出一個題目所述的十字架
做法:‘.'指的是白色,先遍歷查這一行有多少白色,這一列有多少白色,之後再遍歷一遍,比較結果就行,注意的是如果中心點是白的,答案得減一(因為上面遍歷查的時候並沒有算中心點)
程式碼:
//去吧馬里奧!把AC公主救回來! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******###### // ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; const int N = 5e4+1; string st[N]; int h[N],l[N]; int main(){ int q; cin >> q; while(q--){ int n,m; cin >> n >> m; for(int i = 0;i < n;i++){ cin >> st[i]; } int ans; ans= 0; int minx = 500; for(int i = 0;i <n;i++){ for(int j = 0;j < m;j++){ if(st[i][j] == '.'){ h[i]++; l[j]++; } } } for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++){ if(st[i][j] == '.'){ ans = -1; }else{ ans = 0; } if(h[i]+l[j]+ans<minx){ minx = h[i]+l[j]+ans; } } } cout << minx << endl; } }
題意:三個字串,從p裡取字元放到s裡的任意位置,問能不能讓s成為t
做法:一開始讀錯題了,後來差點把人繞死,一開始以為s的位置也可以換,然後就用的統計字元數量的辦法,結果不對,就加了一個判斷函式,判斷s是不是t的字串,這樣就保證了s的順序不需要變就可以成為t,把這個判斷條件加上就可以過了,因為程式碼是後期縫補的,所以亂的一批……
程式碼:
//去吧馬里奧!把AC公主救回來! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******###### // ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; bool com(string s,string t){ int j = 0; for(int i = 0; i < t.length(); i++) { for (j; j < s.length(); j++) { if (t[i] == s[j]) { j++; break; }else{ break; } } } if(j == s.length()) { return 1; }else{ return 0; } } int main(){ int q; cin >> q; while(q--){ string s,t,p; cin >> s >> t >> p; string x; x = s+p; int xxx = 0; xxx = com(s,t); //cout <<xxx<<endl; int a[300]; memset(a,0,sizeof(a)); for(int i = 0;i < x.size();i++){ char l; l = x[i]; //cout << l << endl; a[l]++; } int b[300]; memset(b,0,sizeof(b)); for(int i = 0;i < t.size();i++){ char k; k = t[i]; b[k]++; } int flag = 1; for(int i = 0;i <300;i++){ if(b[i] <= a[i]){ flag = 1; }else{ flag = 0; break; } } if(flag == 1 && xxx == 1){ cout << "YES" <<endl; }else{ cout << "NO" << endl; } } }
E - Buying a TV Set
題意:有一面長寬a,b的牆,需要買一臺電視掛上,電視的寬高比需要滿足x/y,求滿足要求的w/h有幾對
程式碼:
//去吧馬里奧!把AC公主救回來! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******###### // ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; int GCD(int x, int y) { int z = y; while(x%y!=0) { z = x%y; x = y; y = z; } return z; } int main(){ LL a,b,x,y; cin >> a >> b >> x >> y; LL num; num = GCD(x,y); x = x / num; y = y / num; LL i,j; i = a / x; j = b / y; cout << min(i,j) << endl; }