• C. Messy(构造详解)


    (其实有很多种构造方法,先说一下我的)

    (因为有k个子串是合法表达式,所以我们先在最前面构造)

    (k-1个(),然后后面都放(,放完了就结束,因为后面都是))

    (所以大概构造后是这样的()()()()()....(((((((((....))))))))))

    (至于前面k-1个就两个两个判断,如果不是()的形式就去后面交换)

    #include <bits/stdc++.h>
    using namespace std;
    #define p(a,b) make_pair(a,b)
    char s[2009],temp[2009];
    int find(char w,int q)
    {
    	for(int i=q;i<=strlen(s+1);i++)
    		if(s[i]!=w)	return i;
    	return -1;
    }
    void reverse(int l,int r)
    {
    	for(int i=l;i<=r;i++)	temp[i]=s[i];
    	for(int i=l;i<=r;i++)	s[i]=temp[r-(i-l)];
    }
    typedef pair<int,int>ss;
    vector<ss>vec;
    int main()
    {
    	int t,n,k;
    	cin>>t;
    	while(t--)
    	{
    		cin>>n>>k>>(s+1);
    		for(int i=1;i<=k-1;i++)
    		{
    			int now=1+(i-1)*2;
    			if(s[now]=='(')//直接翻转 
    			{
    				if(s[now+1]==')')	continue;
    				else
    				{
    					int last=find(s[now+1],now+2);
    					reverse(now+1,last);
    					vec.push_back(p(now+1,last));
    				}
    			}
    			else//先变成'('再去反转 
    			{
    				int last=find(s[now],now+1);
    				reverse(now,last);
    				vec.push_back(p(now,last));
    				if(s[now+1]==')')	continue;
    				else
    				{
    					last=find(s[now+1],now+2);
    					vec.push_back(p(now+1,last));
    					reverse(now+1,last);
    				}
    			}
    		}
    		for(int i=1+2*(k-1);i<=strlen(s+1);i++)
    		{
    			if(s[i]=='(')	continue;
    			int last=find(s[i],i+1);
    			if(last==-1)	break;
    			reverse(i,last);
    			vec.push_back(p(i,last));
    		}
    		cout<<vec.size()<<endl;
    		for(int i=0;i<vec.size();i++)
    			cout<<vec[i].first<<" "<<vec[i].second<<endl;
    		vec.clear();
    	}
    }
    

    (另一种思路(其实大致相同))

    (先构造成((()))形式)

    (这样就有1个合法串,还需要k-1个)
    (把2和4调换位置可以多一个)
    (3和5调换位置可以多一个)

  • 相关阅读:
    【基础算法-模拟-例题-*校长的问题】-C++
    【基础算法模拟+例题】-C++
    Chrome开发者调试工具 //TODO
    Javascript面试题&知识点汇总(持续汇总...)
    HTML面试题&知识点汇总(持续汇总...)
    零基础学习Web前端开发
    UML
    江西财经大学第一届程序设计竞赛 F
    江西财经大学第一届程序设计竞赛 E
    江西财经大学第一届程序设计竞赛 D
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12941232.html
Copyright © 2020-2023  润新知