【牛客訓練記錄】牛客周賽 Round 70

MNNUACM_2024ZY發表於2024-12-08

訓練情況

賽後反思

D題應該能出的,只是晚自習的debuff疊滿了

A題

判斷 \(4\) 個數是否相等,排序判斷首位是否一樣即可。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int a[4];
    for(int i = 0;i<4;i++) cin>>a[i];
    sort(a,a+4);
    if(a[0] != a[3]) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
}

signed main(){
    int T; cin>>T; while(T--)
    solve();
    return 0;
}

B題

簡單分類討論,如果是紅燈答案是剩餘紅燈時間+過馬路時間,如果是綠燈但是來不及就是剩餘綠燈時間+紅燈時間+過馬路時間,如果是綠燈來得及就是過馬路時間。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int x,y,k,t; cin>>x>>y>>k>>t;
    string s; cin>>s;
    if(s == "G"){
        if(k >= t) cout<<t<<endl;
        else cout<<k+x+t<<endl;
    } else if(s == "R"){
        cout<<k+t<<endl;
    }
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

C題

這題不需要在意操作次數,把所有的 \(1\) 都變成 \(0\) 即可,記錄 \(1\) 的位置直接輸出即可。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int n; cin>>n;
    string s; cin>>s;
    vector<int> ans;
    for(int i = 0;i<n;i++){
        if(s[i] == '1') ans.push_back(i);
    }
    cout<<ans.size()<<endl;
    for(auto i:ans){
        cout<<i+1<<" "<<i+1<<endl;
    }
}

signed main(){
    int T; cin>>T; while(T--)
    solve();
    return 0;
}

E題

這題寫了一個 floyd 全源最短路,輸出了前 \(100\) 的答案,我們透過觀察發現有規律,對於 \(\le 10\) 的部分我們直接輸出,之後就是一個長度為 \(4\) 的迴圈節。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

const int N = 1e3;

int dis[N][N];

int a[21] = {0,0,3,1,4,0,7,1,8,0,11};

void solve(){
    int n; cin>>n;
    // cout<<n<<" ";
    if(n<=10) cout<<a[n]<<endl;
    else {
        int tn = n;
        n-=11;
        if(n%4==0) cout<<1<<endl;
        else if(n%4 == 1) cout<<tn<<endl;
        else if(n%4 == 2) cout<<0<<endl;
        else cout<<tn+1<<endl;
    }
}

signed main(){
    int T; cin>>T; while(T--)
    solve();
    return 0;
}

相關文章