2014-10-16

/*P143悲剧文本
 *采用链表,每输入一个字符就把它存起来,设输入的字符串为S[1-N],
 *则可以用next【i】表示当前显示屏幕中右边的字符编号*/
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 10005;
int last, cur, next[maxn];
char s[maxn];


int main(){
    while(scanf("%s", s) == 1){
        int n = strlen(s+1);
        last = cur = 0;
        nexr[0] = 0;
        
        for(int i = 1; i <=n ;i++){
            char ch = s[i];
            if(ch ==  '[')
                cur = 0;
            else if(ch == ']')
                cur = 0;
            else{
                next[i] = next[cur];
                next[cur] = i;
                if(cur == last) last = i;
                cur = i;
            }
        }
        for(int i = next[0]; i!=0; i = next[i])
            printf("%c",s[i]);
    }
    return 0;
    }
}


/*P148小球下落*/
#include<cstdio>
#include<cstring>


const int maxd = 20;
int s[1<<maxd]


int main(){
    int D,I;
    while(scanf("%d%d",&D,&I) == 2){
        memset(s,0, sizeof(s));
        int k, n = (1<<D)-1;
        for(int i = 1; i <= I;i++){
            k = i;
            for(;;){
                s[k] = !s[k];
                k = s[k] ? k*2 : k*2+1;
                if(k > n)
                    break;
            }
        }
        printf("%d",k/2);
    }
return 0;
}




/*树的层次遍历P150*/
char s[maxn];
bool read_input(){
    failed = false;
    root = newnode();
    for(;;){
        if(scanf("%s",s)!=1)
            return false;
        if(!strcmp(s,"()"))
            break;
        int v;
        sscanf(&s[1],"%d",&v);
        addnode(v,strchr(s,',')+1);
    }
    return true;
}
struct Node{
    bool have_value;
    int v;
    Node *left,*right;
    Node():have_value(false),left(NULL),right(NULL){}//?????????
};
Node* root;


Node* newnode(){
    return new Node();
}


void addnode(int v,char *s){
    int n = strlen(s);
    Node* u = root;
    for(int i = 0;i <n;i++){
        if(s[i] == 'L'){
            if(u->left == NULL)
                u->left = newnode();
            u = u -> left;
        }
        else if(s[i] == 'R'){
            if(u->right == NULL)
                u->right = newnode();
            u = u ->right;
        }
        if(u -> have_value)
            failed = true;
        u -> v = v;
        u -> have_value = true;
    }


}




//按层次遍历
bool bfs(vector<int>& ans){
    queue<Node*> q;
    ans.clear();
    q.push(root);
    while(!q.empty()){
        Node *u = q.front();
        q.pop();
        if(!u->have_value)
            return false;
        ans.push_back(u->v);
        if(u->left != NULL )
            q.push(u->left);
        if(u->right != NULL)
            q.push(u->right);
    }
return true;
}
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值