zoukankan      html  css  js  c++  java
  • 字符串行走得分

    游戏规则,给定一个字符串数组,初始行走方向向右,每经过一个自然数,得分加上自然数,自然数减一,遇到>则行走方向向右,<则行走方向向左,若遇到>或者<号的下一个位置也是大于小于号,则删除当前位置,数组容量减一。若走出边界则游戏终止,输出最终得分。
    输入n,m,q;
    然后输入长度为n的字符串数组,数组中元素为>,<或者自然数,数组中自然数最大不超过m。
    然后输入q对表示左边界和右边界的元素位置,输出得分。

    #include<iostream>
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<sstream>
    #include<stack>
    using namespace std;
    
    string tostring(int a){
    	stringstream ss;
    	ss<<a;
    	string res;
    	ss>>res;
    	return res;
    	
    }
    
    int toint(string & a){
    	stringstream ss;
    	ss<<a;
    	int res;
    	ss>>res;
    	return res;
    }
    
    int search(vector<string>arr,int left,int right){
    	stack<string>st_left;
    	stack<string>st_right;
    	for(int i=right;i>=left;i--){
    		st_left.push(arr[i]);
    	}
    	
    	int res=0;
    	int flag=1;
    	while(true){
    		if(flag==1){
    			if(st_left.empty()){
    				break;
    			}
    			
    			string tmp=st_left.top();
    			if(tmp=="<"){
    				flag=-1;
    				if(!st_right.empty()&&(st_right.top()==">"||st_right.top()=="<"))
    				        st_left.pop();
    				continue;
    			}
    			else if(tmp==">"){
    				flag=1;
    				st_left.pop();
    				if(!st_left.empty()&&(st_left.top()==">"||st_left.top()=="<"))
    				        continue;
    				st_right.push(tmp);
    			}
    			else{
    				if(tmp=="0")
    			   {
    			   	st_left.pop();
    			   	continue;
    			   }
    				res += toint(tmp);
    				st_left.pop();
    				tmp = tostring(toint(tmp)-1);
    				st_right.push(tmp);
    			}
    		}
    		else{
    			if(st_right.empty()){
    				break;
    			}
    			string tmp=st_right.top();
    			if(tmp==">"){
    				flag=1;
    			if(!st_left.empty()&&(st_left.top()==">"||st_left.top()=="<"))
    				    st_right.pop();
    				continue;
    			}
    			else if(tmp=="<"){
    				flag=-1;
    				st_right.pop();
    				if(!st_right.empty()&&(st_right.top()==">"||st_right.top()=="<"))
    				        continue;
    				st_left.push(tmp);
    			}
    			else{
    			   if(tmp=="0")
    			   {
    			   	st_right.pop();
    			   	continue;
    			   }
    				res += toint(tmp);
    				st_right.pop();
    				tmp = tostring(toint(tmp)-1);
    				st_left.push(tmp);
    			}
    		
    		}
    	}
    	return res;
    }
    int main ()
    {
    int n,m,q;
    cin>>n>>m>>q;
    vector<string>arr(n);
    for(int i=0;i<n;i++){
    	cin>>arr[i];
    }
    
    for(int i=0;i<q;i++){
    	int left,right;
    	cin>>left>>right;
    	cout<<search(arr,left-1,right-1)<<endl;
    }
    return 0;
    }
  • 相关阅读:
    客户端负载均衡Feign之一:申明式服务调用Feign入门示例
    客户端负载均衡Ribbon之一:Spring Cloud Netflix负载均衡组件Ribbon介绍
    客户端负载均衡Ribbon之二:Loadbalance的源码
    spring4.0之九:websocket简单应用
    spring4.0之八:Groovy DSL
    spring4.0之七:Ordering Autowired Collections
    spring4.0之六:Generic Qualifier(泛型限定)
    spring4.0之五:@Conditional在满足特定条件下,才会实例化对象
    spring4.0之三:@RestController
    Spring4.0之四:Meta Annotation(元注解)
  • 原文地址:https://www.cnblogs.com/qiuhaifeng/p/11490305.html
Copyright © 2011-2022 走看看