1 条题解

  • 0
    @ 2026-6-30 20:47:57

    我真的不知道出题人把 kk 开到 2×n2 \times n 是什么意思,明明 k=nk=n 就够了。

    考虑开一个栈进行括号匹配。
    每次询问时,将 ll 设为栈顶中的下标,将 rr 设为 crc_r 未知的最左侧下标。
    若交互库返回 Yes,说明 crc_r),并将栈顶元素弹出;
    否则 crc_r(,并将 rr 压入栈中。
    注意特判栈为空,此时不询问,直接将 rr 压入栈中,并将 crc_r 设为 (
    下面是代码。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int n,l[500007],hd,r=1;
    char c[500007];
    string s;
    int main(){
    	cin>>n;
    	while(r<=n){
    		if(!hd){
    			hd=1;
    			l[hd]=r;
    			c[r]='(';
    			r++;
    			continue;
    		}
    		cout<<"? "<<l[hd]<<' '<<r<<endl;
    		cin>>s;
    		if(s[0]=='Y'){
    			c[r]=')';
    			hd--;
    			r++;
    		}
    		else{
    			c[r]='(';
    			hd++;
    			l[hd]=r;
    			r++;
    		}
    	}
    	cout<<"! ";
    	for(int i=1;i<=n;i++) cout<<c[i];
    	cout<<endl;
    	return 0;
    }
    
    • 1

    「ROI 2017 Day 1」四轴飞行器编程

    信息

    ID
    10246
    时间
    2000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者