Diary_2.23

Codeforces Round 1005 (Div. 2)

1. Brogramming Contest

void solve(){
    int len;    cin >> len;
    string s;   cin >> s;
    s = '0'+s;
    len += 2;
    int cnt = 0;
    for(int i=1; i<len; i++){
        if(s[i] != s[i-1])  cnt++;
    }
    cout << cnt-1 << endl;
}

2. Variety is Discouraged

void solve(){
    int n;  cin >> n;
    int a[n];
    map<int, int> q;
    for(int i=0; i<n; i++){
        cin >> a[i];
        q[a[i]]++;
    }
    int len = -1, ansl = -1, ansr = -1;
    for(int i=0; i<n; i++){
        if(q[a[i]] == 1){
            int pos = i+1;
            for(int k=pos; k<n; k++){
                if(q[a[k]] == 1){
                    pos++;
                }else{
                    break;
                }
            }
            pos--;
            if(pos-i+1 > len){
                len = pos-i+1;
                ansl = i+1, ansr = pos+1;
            }
            i = pos;
        }
    }
    if(len == -1){
        cout << 0 << endl;
    }else{
        cout << ansl << ' ' << ansr << endl;
    }
}

3. Remove the Ends

#define int long long
void solve(){
    int n;  cin >> n;
    int a[n+2];
    for(int i=1; i<=n; i++){
        cin >> a[i];
    }
    int dpl[n+2], dpr[n+2];
    memset(dpl, 0, sizeof(dpl));
    memset(dpr, 0, sizeof(dpr));
    for(int i=1; i<=n; i++){
        if(a[i] > 0){
            dpl[i] = dpl[i-1]+a[i];
        }else{
            dpl[i] = dpl[i-1];
        }
    }
    for(int i=n; i>=1; i--){
        if(a[i] < 0){
            dpr[i] = dpr[i+1]-a[i];
        }else{
            dpr[i] = dpr[i+1];
        }
    }
    int ans = 0;
    for(int i=1; i<=n; i++){
        ans = max(dpl[i]+dpr[i], ans);
    }
    cout << ans << endl;
}

用时36分钟,rank大概在 2500 左右,表现分 1600 左右
然后后面的就做不出来了

其他的有价值的题

1. Connections in Galaxy War

const int maxn = 1e4+10;
int n, power[maxn], pre[maxn], m, q, ans[5*maxn];
struct node{
    int l, r;
    node(){}
    node(int x, int y){
        l = x, r = y;
    }
    bool operator<(const node &x)const{
        if(l == x.l)    return r < x.r;
        return l < x.l;
    }
};
struct noded{
    string op;
    int u, v;
};
map<node, bool> tree;
noded query[5*maxn];
int find(int now){
    if(pre[now] == now) return now;
    return pre[now] = find(pre[now]);
}
void init(){
    for(int i=0; i<=n; i++)	pre[i] = i;
    map<node, bool> ctree;  swap(ctree, tree);
    for(int i=0; i<n; i++)	cin >> power[i];
    cin >> m;
    for(int i=0; i<m; i++){
        int u, v;   cin >> u >> v;
        tree[node(u, v)] = true;
    }
}
void solve(){
    init();
    cin >> q;
    string op;
    int u, v;
    for(int i=0; i<q; i++){
        cin >> op;
        if(op == "query"){
            cin >> u;
            query[i].u = u;
        }else{
            cin >> u >> v;
            tree[node(u, v)] = false;
            tree[node(v, u)] = false;
            query[i].u = u, query[i].v = v;
        }
        query[i].op = op;
        ans[i] = -2;
    }
    for(auto &x: tree){
        if(x.second){
            u = x.first.l, v = x.first.r;
            int ru = find(u), rv = find(v);
            if(ru == rv)    continue;
            // 根据权值和编号确定根节点
            if(power[ru] < power[rv])   pre[ru] = rv;
            else if(power[ru] > power[rv])    pre[rv] = ru;
            else{
                if(ru < rv) pre[rv] = ru;
                else        pre[ru] = rv;
            }
        }
    }
    for(int i=q-1; i>=0; i--){
        if(query[i].op == "query"){
            u = query[i].u;
            int ru = find(u);
            if(power[ru] > power[u])	ans[i] = ru;
            else	ans[i] = -1;
        }else{
            u = query[i].u, v = query[i].v;
            int ru = find(u), rv = find(v);
            if(ru == rv)    continue;
            if(power[ru] < power[rv])   pre[ru] = rv;
            else if(power[ru] > power[rv])    pre[rv] = ru;
            else{
                if(ru < rv) pre[rv] = ru;
                else        pre[ru] = rv;
            }
        }
    }
    int t = 0;
    for(int i=0; i<q; i++){
        if(ans[i] != -2){
            if(t)   cout << endl;
            cout << ans[i];
            t++;
        }
    }
}
signed main(){
    io;
    Test;
    int t;  t=0;
    // cin >> t;
    cin >> n;
    do{
        if(t)   cout << endl << endl;	// 这道题的数据规则很奇特
        solve();
        t++;
    }while(cin >> n);
}

2. Navigation Nightmare

const int maxn = 4e4+10;
int n, m, k, pre[maxn], x[maxn], y[maxn], ans[maxn];
struct Edge{
    int u, v, w;
    char dir;
};
struct Query{
    int u, v, step, pos;
    bool operator<(const Query &x)const{
        return step < x.step;
    }
};
Edge edge[maxn];
Query query[2*maxn];
int find(int now){
    if(pre[now] == now) return now;
    int r = find(pre[now]);
    x[now] += x[pre[now]];
    y[now] += y[pre[now]];
    return pre[now] = r;
}
void get_data(){
    cin >> n >> m;
    map<char, int> Op;
    Op['W'] = -1, Op['E'] = 1, Op['S'] = 1, Op['N'] = -1;
    for(int i=0; i<m; i++){
        cin >> edge[i].u >> edge[i].v >> edge[i].w >> edge[i].dir;
        edge[i].w *= Op[edge[i].dir];
    }
    cin >> k;
    for(int i=0; i<k; i++){
        cin >> query[i].u >> query[i].v >> query[i].step;
        query[i].pos = i;
    }
    sort(query, query+k);
    for(int i=0; i<=n; i++) pre[i] = i;
}
void solve(){
    get_data();
    int cnt = 0, u, v, w;
    char dir;
    for(int i=0; i<k; i++){
        int r = query[i].step;
        for(int j=cnt; j<r; j++){
            u = edge[j].u, v = edge[j].v, w = edge[j].w, dir = edge[j].dir;
            int ru = find(u), rv = find(v);
            if(ru == rv)    continue;
            pre[ru] = rv;
            if(dir=='W' || dir=='E'){
                x[ru] = w-x[u]+x[v];
                y[ru] = -y[u]+y[v];
            }else{
                x[ru] = -x[u]+x[v];
                y[ru] = w-y[u]+y[v];
            }
        }
        cnt = r;
        u = query[i].u, v = query[i].v;
        int ru = find(u), rv = find(v), pos = query[i].pos;
        if(ru == rv)	ans[pos] = abs(x[u]-x[v])+abs(y[u]-y[v]);
        else	ans[pos] = -1;
    }
    for(int i=0; i<k; i++)  cout << ans[i] << endl;
}
posted @ 2025-02-23 11:07  Devpp  阅读(19)  评论(0)    收藏  举报