zoukankan      html  css  js  c++  java
  • Luogu p1241 括号序列

    括号序列题目连接

    这是一道与dp毫无半点关系的题

    本来是去找的题来着,结果并没有找到,然后看到了这道题。

    (本来以为会是很好写的一道题结果因为题意不清直接原地去世了)

    思路很简单,基本没有技术含量。

    因为数据范围很小,我们可以直接进行暴搜;

    定义bool 数组add表示第i个字符所对应的括号有没有被匹配,如果没有匹配需手动补全;

    从左往右扫描,如果扫描到']'or')',从当前位置开始向左扫描,寻找配对括号,如果找到,将左右括号的add都置为1,break;

    然后这么找大概就可以ac了叭?

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define mk make_pair
    
    using namespace std;
    
    char t[110];
    bool add[110];
    
    int main(){
    	scanf("%s",t+1);
    	int len=strlen(t+1);
    	for(int i=1;i<=len;i++){
    		if(t[i]==']'){
    			for(int j=i-1;j>=1;j--){
    				if(add[j]==0&&t[j]=='[') {
    					add[j]=add[i]=1;
    					break;
    				}
    			}
    		}
    		if(t[i]==')') {
    			for(int j=i-1;j>=1;j--) {
    				if(add[j]==0&&t[j]=='(') {
    					add[i]=add[j]=1;
    					break;
    				}
    			}
    		}
    	}
    	for(int i=1;i<=len;i++) if(!add[i]){
    		if(t[i]==')'||t[i]=='(') printf("()");
    		if(t[i]=='['||t[i]==']') printf("[]");
    	}else printf("%c",t[i]);
    	return 0;
    }
    

    但是

    当我们交上去:

    可以说是听取wa声一片了;

    为什么呢?!

    题面很毒瘤我们看不懂它wr;

    现在好像可以意会了但并不能言传因此就假装没看懂叭(自己去悟

    像是括号序列([)],在我方程序判断是合法的,而实际上是不合法的,需要补成()[()];

    所以我们需要加上:

    if(t[j]=='['&&add[j]==0) break;//t[i]==')';
    if(t[j]=='('&&add[j]==0) break;//t[i]==']';
    

    来判断被不同的括号横插一刀的情况

    然后这样就可以ac了!?

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    
    char t[110];
    bool add[110];
    
    int main(){
    	scanf("%s",t+1);
    	int len=strlen(t+1);
    	for(int i=1;i<=len;i++){
    		if(t[i]==']'){
    			for(int j=i-1;j>=1;j--){
    				if(t[j]=='('&&add[j]==0) break;
    				if(add[j]==0&&t[j]=='[') {
    					add[j]=add[i]=1;
    					break;
    				}
    			}
    		}
    		if(t[i]==')') {
    			for(int j=i-1;j>=1;j--) {
    				if(add[j]==0&&t[j]=='[') break;
    				if(add[j]==0&&t[j]=='(') {
    					add[i]=add[j]=1;
    					break;
    				}
    			}
    		}
    	}
    	for(int i=1;i<=len;i++) if(!add[i]){
    		if(t[i]==')'||t[i]=='(') printf("()");
    		if(t[i]=='['||t[i]==']') printf("[]");
    	}else printf("%c",t[i]);
    	return 0;
    }
    

    end-

  • 相关阅读:
    ranger0.5.4-开源安装配置
    Spark Streaming 读取Kafka数据写入ES
    kettle与sqoop的比较
    spark常用算子
    eclipse快捷键
    hive相关操作
    我眼中如何成为一名合格PHP高级开发工程师
    laravel 路由404
    TP5.0 未定义变量
    公众号基本配置(token验证失败)|公众平台测试账号接口配置信息(token验证失败)
  • 原文地址:https://www.cnblogs.com/zhuier-xquan/p/11482931.html
Copyright © 2011-2022 走看看