1 条题解

  • 0
    @ 2025-7-13 19:06:51

    代码实现

    //poj 1023
    //sep9
    #include <iostream>
    #include <stack>
    using namespace std;
    int k;
    char s[80];
    long long n;
     
    int main()
    {
    	int cases;
    	scanf("%d",&cases);
    	while(cases--){
    		scanf("%d%s%lld",&k,s,&n);
    		stack<int> ans;	
    		int i;
    		if(n==0){
    			puts("0");
    			continue;
    		}
    		for(i=k-1;i>=0;--i){
    			if(n%2==0){
    				ans.push(0);
    				n/=2;
    				continue;
    			}
    			if(n%2==1){
    				ans.push(1);
    				if(s[i]=='p'){
    					n=n/2;
    				}else{
    					n=n/2+1;
    				}
    				continue;
    			}
    			if(n%2==-1){
    				ans.push(1);
    				if(s[i]=='p'){
    					n=n/2-1;
    				}else{
    					n=(n+1)/2;
    				}		
    			} 
    		}
    		if(!(i==-1&&n==0))
    			puts("Impossible");
    		else{
    			while(!ans.empty()){
    				printf("%d",ans.top());
    				ans.pop();
    			}
    			printf("\n");
    		}
    	}
    	return 0;	
    }
    
    • 1

    信息

    ID
    24
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    0
    上传者