1 条题解
-
0
我真的不知道出题人把 开到 是什么意思,明明 就够了。
考虑开一个栈进行括号匹配。
每次询问时,将 设为栈顶中的下标,将 设为 未知的最左侧下标。
若交互库返回Yes,说明 为),并将栈顶元素弹出;
否则 为(,并将 压入栈中。
注意特判栈为空,此时不询问,直接将 压入栈中,并将 设为(。
下面是代码。#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
信息
- ID
- 10246
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 2
- 上传者