ccc

模拟4A.多项式输出


思路

模拟

AC代码

    void solve(){
        int n;
        cin >> n;
        for(int i = n; i >= 0; i -- ){
            int e;
            cin >> e;
            if(e == 0)continue;
            if(e > 0 && i != n)cout << "+";
            if(e < 0){
                e = - e;
                cout << "-";
            }
            if(e != 1 || i == 0)cout << e;
            if(i > 1)cout << "x^" << i;
            if(i == 1)cout << "x" ;
        }
        cout << endl;
    }

模拟4B.借教室


思路

二分+差分

80分代码

    const int N = 1e6+10, MAX = 1e9, INF = -1e9;

    typedef struct name{
        int x, y;
        int num;
    }P;

    int n, m;
    int a[N];
    P b[N];
    int c[N];
    void solve(){
        cin >> n >> m;
        for(int i = 1; i <= n ; i ++ ){
            cin >> a[i];
        }
        for(int i = 1; i <= m ; i ++ ){
            cin >> b[i].num >> b[i].x >> b[i].y;
            for(int j = b[i].x; j <= b[i].y; j ++ ){
                a[j] -= b[i].num;
                if(a[j] < 0){
                    cout << -1 << endl;
                    cout << i << endl;
                    return ;
                }
            }
        }
        cout << 0 << endl;
        return ;
    }

AC代码

    const int N = 1e6+10, MAX = 1e9, INF = -1e9;

    typedef struct name{
        int x, y;
        int num;
    }P;

    int n, m;
    int a[N];
    P b[N];
    int c[N];
    bool check(int mid){
        memset(c, 0,sizeof c);
        for(int i = 1; i <= mid; i ++ ){
            c[b[i].x] += b[i].num;
            c[b[i].y + 1] -= b[i].num; 
        }
        for(int i = 1; i <= n ; i ++ ){
            c[i] += c[i - 1];
            if(c[i] > a[i])return true;
        }
        return false;
    }

    void solve(){
        cin >> n >> m;
        for(int i = 1; i <= n ; i ++ ){
            cin >> a[i];
        }
        for(int i = 1; i <= m ; i ++ ){
            cin >> b[i].num >> b[i].x >> b[i].y;
        }
        if(!check(m)){
            cout << 0 << endl;
            return ;
        }
        int l = 1, r = m;
        while(l < r){
            int mid = (l + r) >> 1;
            if(check(mid))r = mid;
            else l = mid + 1;
        }
        cout << -1 << endl;
        cout << l << endl;
        return ;

    }

模拟4D.蚯蚓


思路

模拟

30分代码

    bool cmp(int x, int y){
        return x > y;
    }

    void solve(){
        int n, m, q, u, v, t;
        cin >> n >> m >> q >> u >> v >> t;
        vector<int> a;
        for(int i = 1; i <= n ; i ++ ){
            int e;
            cin >> e;
            a.pb(e);
        }
        for(int k = 0; k < m ; k ++ ){
            int p;
            int top = - 1;
            for(int i = 0; i < n + k; i ++ ){
                if(top < a[i]){
                    top = a[i];
                    p = i;
                }
            }
            for(int i = 0; i < n + k; i ++ ){
                if(i != p)a[i] += q;
            }
            if((k + 1) % t == 0)cout << a[p] << " ";
            a.pb((a[p] * u) / v);
            a.pb(a[p] - (a[p] * u) / v);
            a.erase(a.begin() + p);
        }
        cout << endl;
        sort(a.begin(), a.end(), greater<>());
        sort(a.begin(), a.end(), cmp);
        for(int i  = 0; i < a.size(); i ++ ){
            if((i + 1) % t == 0)cout << a[i] << " ";
        }
        cout << endl;
        return ;
    }
posted @ 2026-03-13 23:52  Oaths  阅读(2)  评论(0)    收藏  举报