• 【codeforces 239B】Easy Tape Programming


    【题目链接】:http://codeforces.com/contest/239/problem/B

    【题意】

    给你一个长度为n的字符串,只包括‘<”>’以及数字0到9;
    给你q个区间(n和q都小于等于100)
    然后让你在这q个区间里面做一些操作;
    有一个指针int,指向当前操作的位置,还有一个方向的int;
    表示这个指针它要移动的方向;
    每次对一个位置进行操作;
    如果该位置是数字;
    则把这个数字输出,然后这个数字递减1;
    如果数字小于0了,则把它删掉;
    然后把指针往方向int的方向移动一个单位;
    如果是’>’或’<’则,把方向改成左或右;
    然后往新的方向走,如果走了一步之后还是’<’或’>’
    则把前一个’<’或’>’删掉;
    问你最后0..9各输出了多少个;

    【题解】

    每次模拟一步即可;
    直到cp指针跳出了区间为止;
    可以用数组来模拟链表的删除过程;
    对每个区间的操作,都把数组链表初始化一下即可;

    【Number Of WA

    0

    【反思】

    这种模拟删掉的过程用数组模拟链表的方法都比较方便;

    【完整代码】

    #include <bits/stdc++.h>
    #define rep1(i,x,y) for (int i = x;i <= y;i++)
    #define rep2(i,x,y) for (int i = x;i >= y;i--)
    using namespace std;
    
    const int N = 100+10;
    
    int n,q,l,r,a[N][2],cp,dp,num;
    int tot[10];
    string s,s1;
    
    void get_next(){
        int ll = a[cp][0],rr = a[cp][1],tcp = cp;
        if (s1[cp]>='0' && s1[cp]<='9'){
            cp = a[cp][dp];
            num++;
            tot[s1[tcp]-'0']++;
            s1[tcp]--;
            if (s1[tcp]<'0'){
                a[ll][1] = rr;
                a[rr][0] = ll;
            }
        }else{
            if (s1[cp]=='<')
                dp = 0;
            else
                dp = 1;
            cp = a[cp][dp];
            if (cp < l || cp > r) return;
            if (s1[cp]>='0' && s1[cp]<='9') return;
            a[ll][1] = rr,a[rr][0] = ll;
        }
    }
    
    int main(){
        //freopen("D:\rush.txt","r",stdin);
        cin >> n >> q;
        cin >> s;
        s = ' ' + s;
        rep1(i,1,q){
            num = 0;
            s1 = s;
            cin >> l >> r;
            rep1(j,l,r)
                a[j][0] = j-1,a[j][1] = j+1;
            rep1(j,0,9)
                tot[j] = 0;
            cp = l,dp = 1;
            while (1){
                get_next();
                if (cp <l || cp>r) break;
            }
            rep1(j,0,9)
                cout << tot[j] <<' ';
            cout << endl;
        }
        return 0;
    }
  • 相关阅读:
    【mybatis】IF判断的坑
    QCheckBox控件
    对话框——文件对话框
    对话框——颜色对话框
    对话框——输入对话框
    事件和信号
    布局管理——复习示例
    布局管理——网格布局
    布局管理——盒式布局
    1.4 控制流
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626244.html
Copyright © 2020-2023  润新知