• Codeforces_813


    A.统计总时间,从总时间开始找第一个能提交的点。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,m,a[1005],ok[100005] = {0};
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin >> n;
        int sum = 0;
        for(int i = 1;i <= n;i++)   cin >> a[i],sum += a[i];
        cin >> m;
        for(int i = 1;i <= m;i++)
        {
            int x,y;
            cin >> x >>y;
            for(int j = x;j <= y;j++)   ok[j] = 1;
        }
        for(int i = sum;i <= 100000;i++)
        {
            if(ok[i])
            {
                cout << i << endl;
                return 0;
            }
        }
        cout << -1 << endl;
        return 0;
    }
    View Code

    B.把每个unlucky值都算出来,再算最长段。

    #include<bits/stdc++.h>
    using namespace std;
    
    long long x,y,l,r,a[105],b[105];
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin >> x >> y >> l >> r;
        int cnt1 = 0,cnt2 = 0;
        a[++cnt1] = 1;
        b[++cnt2] = 1;
        while(a[cnt1] <= r/x)
        {
            a[cnt1+1] = a[cnt1]*x;
            cnt1++;
        }
        while(b[cnt2] <= r/y)
        {
            b[cnt2+1] = b[cnt2]*y;
            cnt2++;
        }
        set<long long> s;
        for(int i = 1;i <=cnt1;i++)
        {
            if(a[i] > r)    continue;
            for(int j = 1;j <= cnt2;j++)
            {
                if(b[j] > r) continue;
                if(a[i]+b[j] < l) continue;
                if(a[i]+b[j] > r) continue;
                s.insert(a[i]+b[j]);
            }
        }
        s.insert(l-1);
        s.insert(r+1);
        long long ans = 0;
        for(auto it = ++s.begin();it != s.end();it++)
        {
            long long xx = *it;
            it--;
            long long yy = *it;
            it++;
            ans = max(ans,xx-yy-1);
        }
        cout << ans << endl;
        return 0;
    }
    View Code

    C.分两种情况,Bob一直往下跑到叶子节点或者先往上跑,再往下跑到更深的叶子节点。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,x,a[200005] = {0},maxx[200005],ok[200005] = {0};
    int ans;
    vector<int> v[200005];
    
    void dfs1(int now,int pre)
    {
        maxx[now] = a[now];
        for(int i = 0;i < v[now].size();i++)
        {
            int t = v[now][i];
            if(t == pre)    continue;
            a[t] = a[now]+1;
            dfs1(t,now);
            if(ok[t])   ok[now] = 1;
            maxx[now] = max(maxx[now],maxx[t]);
        }
    }
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin >> n >> x;
        ok[x] = 1;
        for(int i = 1;i < n;i++)
        {
            int x,y;
            cin >> x >> y;
            v[x].push_back(y);
            v[y].push_back(x);
        }
        dfs1(1,-1);
        ans = maxx[x];
        for(int i = 2;i <= n;i++)
        {
            if(ok[i])
            {
                if(a[x]-a[i] < a[i])    ans = max(ans,maxx[i]);
            }
        }
        cout << ans*2 << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    深入理解linux启动过程
    Oracle 12c 的新功能:模式匹配查询
    AIX 常用命令汇总
    Oracle 11g ADRCI工具使用
    AIX TL的升级和回退
    oracle redo log的维护
    202. Happy Number
    198. House Robber
    203. Remove Linked List Elements
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/zhurb/p/7253234.html
Copyright © 2020-2023  润新知