1. 程式人生 > 實用技巧 >2020.10.02 Rating 補題報告

2020.10.02 Rating 補題報告

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;

    }
}

C - From S To T

題意:三個字串,從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有幾對

做法:資料範圍太大了,不能暴力了,所以先把x/y化簡(用gcd),之後分別拿a和b除以化簡之後的數,取其中最小的,就是至少滿足的對數,大的那個數是不一定滿足的。

程式碼:

//去吧馬里奧!把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;
}