zoukankan      html  css  js  c++  java
  • 18广工新生赛

    01:

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    int n;
    int main(){
        int T;
        scanf("%d", &T);
        while(T--){
            scanf("%d", &n);
            int f = 1, t;
            while(n--){
                scanf("%d", &t);
                if(!t) f = 0;
            }
            if(f) puts("WeRide.ai");
            else puts("Transform Mobility With Autonomous Driving");
        }
        return 0;
    }
    View Code

    02:

    由于每个数有50% += a 50% -= a所以 数的期望是不变的。

    所以就求和的时候 就用前缀合就求和一下就好了。

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    int a[N];
    int main(){
        int n, m, T;
        scanf("%d", &T);
        while(T--){
            scanf("%d%d", &n, &m);
            for(int i = 1; i <= n; ++i)
                scanf("%d", &a[i]), a[i] += a[i-1];
            int op, l, r;
            while(m--){
                scanf("%d%d%d", &op, &l, &r);
                if(op == 2){
                    printf("%d
    ", a[r] - a[l-1]);
                }
            }
        }
        return 0;
    }
    View Code

    03:

    如果是矩形的话,那么一定是在直径上,然后找到一个直径,然后就枚举可能存在的矩形,如果存在矩形,则弧长相等。

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 305;
    int a[N];
    int n;
    int L = 0;
    inline int cal(int x, int y){
        if(x > n) x -= n;
        if(y > n) y -= n;
        if(x > y) swap(x, y);
        return min(a[y]-a[x], a[x]+L-a[y]);
    }
    int main(){
        while(~scanf("%d", &n)){
            for(int i = 2; i <= n; ++i){
                scanf("%d", &a[i]);
                a[i] += a[i-1];
            }
            scanf("%d", &L);
            L += a[n];
            int ans = 0;
            if(L&1) {
                printf("0
    ");
                continue;
            }
            for(int i = 1; i <= n; ++i){
                for(int j = i+1; j <= n; ++j){
                    if(cal(i,j) != L/2) continue;
                    for(int k = i+1; k < j; ++k){
                        for(int z = j+1; z < i+n; ++z){
                            int t1 = cal(i,k), t2 = cal(j,z);
                            if(t1 == t2) ans++;
                            else if(t1 < t2) break;
                        }
                    }
                }
            }
            cout << ans/2 << endl;
        }
        return 0;
    }
    View Code

    04:

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    char s[N];
    int main(){
        int n, T;
        scanf("%d", &T);
        while(T--){
            scanf("%d", &n);
            getchar();
            int ans = 0, len;
            while(n--){
               cin.getline(s, N);
               if(s[0] == 'i') ans += 4;
               else if(s[0] == 'b') ans += 1;
               else if(s[0] == 'l') ans += 8;
               else if(s[0] == 'd') ans += 8;
               else if(s[0] == 'c') ans += 1;
               else if(s[0] == 'f') ans += 4;
            }
            ans = (ans+1023) / 1024;
            printf("%d
    ", ans);
        }
        return 0;
    }
    View Code

    05:

    爆搜找规律。

    爆搜代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 5e5 + 100;
    int sta[N];
    int Max, gg;
    void dfs(int b, int l, int lt, int cnt){
        if(lt == 0){
            Max = max(Max, l);
            if(gg == l){
                for(int i = 1; i < cnt; ++i)
                    cout << sta[i] << ' ';
                cout << endl;
            }
        }
        for(int i = b; i <= lt; ++i){
            sta[cnt] = i;
            dfs(i+1, l*i, lt-i, cnt+1);
        }
    }
    int main(){
        int n;
        while(cin >> n){
            gg = -1;
            Max = 0;
            dfs(1, 1, n, 1);
            gg = Max;
            dfs(1, 1, n, 1);
        }
        return 0;
    }
    View Code
    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    LL Min[N], Max[N];
    vector<int> v;
    void init(){
        v.pb(2); v.pb(3);
        for(int i = 6; i <= 200; ++i){
            int t = v.size();
            if(v[0] != 2 && v[t-1] == v[t-2]+1)
                ++v[t-1];
            else if(v[0] != 2){
                --v[t-1];
                v.insert(v.begin(), 2);
            }
            else {
                int f = 1;
                for(int i = t-2; i >= 0; i--){
                    if(v[i]+1 != v[i+1]){
                        ++v[i];
                        f = 0;
                        break;
                    }
                }
                if(f) ++v[t-1];
            }
            Min[i] = i-1;
            Max[i] = 1;
            for(int x : v){
                Max[i] *= x;
            }
        }
    }
    vector<int> vc;
    int main(){
        int T, n;
        scanf("%d", &T);
        init();
        Min[1] = Max[1] = 1;
        Min[2] = Max[2] = 2;
        Min[3] = 2; Max[3] = 3;
        Min[4] = 3; Max[4] = 4;
        Min[5] = 4; Max[5] = 6;
        while(T--){
            scanf("%d", &n);
            printf("%lld %lld
    ", Min[n], Max[n]);
        }
        return 0;
    }
    View Code

    06:

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    int a[N];
    int main(){
        int T, n;
        scanf("%d", &T);
        while(T--){
            scanf("%d", &n);
            int ans = 1;
            for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
            int f = 1;
            for(int i = 2; i <= n; ++i){
                if(a[i] == a[i-1]+1) ++f;
                else f = 1;
                ans = max(ans, f);
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
    View Code

    07:

    由样例分析可得就是和墙围成半圆,这时候面积最大。

    0的时候是无解

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    double pi = acos(-1);
    int main(){
        int T;
        double  n;
        scanf("%d", &T);
        while(T--){
            scanf("%lf", &n);
            double ans = n*n/pi/2;
            if(abs(ans) < 1e-8) puts("Impossble");
            else printf("%.8f
    ", ans);
        }
        return 0;
    }
    View Code

    08:

    题解:我们可以从样例分析中发现,我们可以经过4次跳跃之后返回到原来的这个地方。

    也就是说,我们每次走到一个新的位置之后,我们可以遍历他的所有因子,再返回到这个位置,然后继续按原来的路径行事。

    我们不用管他怎么走,只需要明白每出现一个数会对答案产生什么影响就好了。

    最后 是 x -> -x 。

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    int vis[N];
    void init(){
        for(int i = 2; i < N; ++i){
            for(int j = i+i, t = 2; j < N; j+=i, t++){
                    vis[j] += t;
            }
        }
    }
    int main(){
        init();
        int n;
        while(~scanf("%d", &n)){
            LL sum = 0;
            for(int i = 2; i <= n; ++i){
                sum += vis[i];
            }
            printf("%lld
    ", sum*4+n-1);
        }
        return 0;
    }
    View Code

    09:

    题目写的是会把数修改掉。

    所以我们只需要从后往前做,每次遇到新的数的时候,都判断一下他会不会对答案产生影响。 

    如果产生影响的话,那么肯定就是 在他后面的修改 位置是在他后面的。

    然后 平方和是 n*(n+1)*(n+2) / 6

    这个地方会爆LL,除法不能先取模数,然后在做乘法。

    模数也不是质数,所以不能求逆元。

    可以用int128做,或者连续的3个数一定就有2的倍数或者3的倍数,所以也可以先除再做。

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod = 123456789;
    const int N = 1e5 + 100;
    int T;
    int a[N];
    LL cal(int x){
        __int128 v = x;
        v = v * (v+1) * (v*2+1)/6;
        v %= mod;
        return v;
    }
    int main(){
        scanf("%d", &T);
        while(T--){
            int n, m;
            scanf("%d%d", &n, &m);
            LL ans = 0;
            for(int i = 1; i <= m; ++i)
                scanf("%d", &a[i]);
            int lat = n+1;
            for(int i = m; i >= 1; --i){
                if(lat <= a[i]) continue;
                ans += cal(lat-a[i]);
                ans %= mod;
                lat = a[i];
            }
            ans = (ans%mod)+mod;
            ans %= mod;
            printf("%lld
    ", ans);
        }
        return 0;
    }
    View Code

    10:

    直接模拟就好了。 不会map的可以去写一下。

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    char mp[N];
    map<string, int> ms;
    string str, s;
    int main(){
        int n;
        ios::sync_with_stdio(false);
        cin.tie(0);
        mp['A'] = mp['B'] = mp['C'] = '2';
        mp['D'] = mp['E'] = mp['F'] = '3';
        mp['G'] = mp['H'] = mp['I'] = '4';
        mp['J'] = mp['K'] = mp['L'] = '5';
        mp['M'] = mp['N'] = mp['O'] = '6';
        mp['P'] = mp['R'] = mp['S'] = '7';
        mp['T'] = mp['U'] = mp['V'] = '8';
        mp['W'] = mp['X'] = mp['Y'] = '9';
    
        while(cin >> n){
            ms.clear();
            for(int i = 1; i <= n; ++i){
                cin >> str;
                s.clear();
                for(int j = 0; j < str.size(); ++j){
                    if(isalpha(str[j])){
                        s.pb(mp[str[j]]);
                    }
                    else if(isdigit(str[j]))
                        s.pb(str[j]);
                    if(s.size() == 3) s.pb('-');
                }
                ms[s]++;
            }
            int f = 0;
            //cout << "FFF" << endl;
            for(auto it = ms.begin(); it != ms.end(); ++it){
                if(it->se > 1){
                    f = 1;
                    cout << it->fi << " " << it->se << endl;;
                }
            }
            if(!f) puts("No duplicates.");
        }
        return 0;
    }
    View Code

    11:

    题意:要有半数及以上的A或者B,然后求最大。

    我们把每类人都算分开,然后排序。

    然后肯定是把所以的11都放进去。

    然后就是把 01 和 10 配对, 配对的时候肯定就是大的先放进去。

    这样就会剩下m个01 或者是 m个10。

    我们刚开始放进去k个11。

    那么我们可以从剩下的01(10)和00当中选k个,需要每次都取大的。

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    vector<int> vc[4];
    bool cmp(int x, int y){
        return x > y;
    }
    int main(){
        int n, op, v;
        while(~scanf("%d", &n)){
            for(int i = 0; i < 4; ++i) vc[i].clear();
            for(int i = 1; i <= n; ++i){
                scanf("%d%d", &op, &v);
                if(op == 11) vc[0].pb(v);
                if(op == 10) vc[1].pb(v);
                if(op == 1) vc[2].pb(v);
                if(op == 0) vc[3].pb(v);
            }
            for(int i = 1; i < 3; ++i)
                sort(vc[i].begin(), vc[i].end(), cmp);
            int num = vc[0].size();
            LL ans = 0;
            for(int i = 0; i < vc[0].size(); ++i) ans += vc[0][i];
            int t1 = min(vc[1].size(), vc[2].size());
            for(int i = 0; i < t1; ++i){
                ans += vc[1][i] + vc[2][i];
            }
            for(int i = t1; i < vc[1].size(); ++i)
                vc[3].pb(vc[1][i]);
            for(int i = t1; i < vc[2].size(); ++i)
                vc[3].pb(vc[2][i]);
            sort(vc[3].begin(), vc[3].end(), cmp);
            for(int i = 0; i < num && i < vc[3].size(); ++i){
                ans += vc[3][i];
            }
            printf("%lld
    ", ans);
        }
        return 0;
    }
    View Code

    12:

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    set<int> s;
    int main(){
        int T;
        scanf("%d", &T);
        while(T--){
            int b;
            scanf("%d", &b);
            for(int i = 1; i <= 1000; ++i){
                int tmp = b/__gcd(b,i);
                s.insert(tmp);
            }
            cout << s.size() << endl;
            s.clear();
        }
        return 0;
    }
    View Code

    13:

    #include<bits/stdc++.h>
    using namespace std;
    #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
    #define LL long long
    #define ULL unsigned LL
    #define fi first
    #define se second
    #define pb push_back
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define lch(x) tr[x].son[0]
    #define rch(x) tr[x].son[1]
    #define max3(a,b,c) max(a,max(b,c))
    #define min3(a,b,c) min(a,min(b,c))
    typedef pair<int,int> pll;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const LL mod =  (int)1e9+7;
    const int N = 1e5 + 100;
    int main(){
        int T, n;
        scanf("%d", &T);
        for(int _cas = 1; _cas <= T; _cas++){
            if(_cas>1) puts("");
            scanf("%d", &n);
            while(n!=1){
                if(n&1){
                    printf("%d*3+1=%d
    ",n,n*3+1);
                    n = n*3 +1;
                }
                else printf("%d/2=%d
    ",n,n/2), n/=2;
            }
    
        }
        return 0;
    }
    View Code
  • 相关阅读:
    红黑树(二)插入
    HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)
    Codeforces 433 Div.2(A、B、C、D)
    Codeforces 846D Monitor(简单二分+二维BIT)
    hihoCoder 1403 后缀数组一·重复旋律(后缀数组+单调队列)
    CF 787D Legacy(线段树思想构图+最短路)
    HDU 6165 FFF at Valentine(Tarjan缩点+拓扑排序)
    Codeforces 165E Compatible Numbers(二进制+逆序枚举)
    Codeforces 672D Robin Hood(二分好题)
    HITOJ 2739 The Chinese Postman Problem(欧拉回路+最小费用流)
  • 原文地址:https://www.cnblogs.com/MingSD/p/10050324.html
Copyright © 2011-2022 走看看