https://codeforces.com/contest/1214/problem/C
括号不匹配时最多交换1对括号后看是否匹配
ll n,m,t,minn=INF,maxx,cnt,sum,tmp,ans;
string s;
stack<char> v;
ll num1,num2;
int main(){
cin>>n;
cin>>s;
for(int i=0;i<n;i++){
if(s[i]=='(')
num1++;
else
num2++;
}
if(num1!=num2)
return cout<<"NO"<<endl,0;
for(int i=0;i<n;i++){
if(v.empty())
v.push(s[i]);
else if(s[i]==')' && v.top()=='(')
v.pop();
else
v.push(s[i]);
}
if(v.empty())
return cout<<"YES"<<endl,0;
if(v.size()==2){
char a=v.top();
v.pop();
char b=v.top();
if(a=='(' && b==')')
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
else
cout<<"NO"<<endl;
return 0;
}
ll n,m,t,minn=INF,maxx,cnt,sum,tmp,ans;
string s;
ll num1,num2;
int main(){
cin>>n>>s;
for(int i=0;i<n;i++){
if(s[i]==')')
sum++;
else
sum--;
if(sum>=2) //两个以上)不能通过交换平衡
return cout<<"NO"<<endl,0; //)) 只能交换1次 多个((还有可能匹配
}
if(sum==0)
cout<<"YES"<<endl;
else //((多余为-值 保证出现一次)(才可以
cout<<"NO"<<endl;
return 0;
}
A
都是1的倍数 d 起步价 d
都是5的倍数 e 起步价 5*e
折中选择
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define pb push_back
#define mp make_pair
#define IO ios::sync_with_stdio(false)
#define fi first
#define se second
typedef long long ll;
typedef pair<int,int> pii;
const int maxn=4e5+5;
const int maxm=1e6+5;
const ll INF=0x3f3f3f3f;
const ll mod=1e9+7;
const double PI=acos(-1.0);
ll n,m,t,minn=INF,maxx,cnt,sum,tmp,f;
ll d,e;
//枚举
int main(){
cin>>n>>d>>e;
e=e5; //5块起步 都是5的倍数
for(int i=0;i<=n/d;i++) //有1美元 能换多少美元 枚举两个都选 看剩余最小
{
minn=min(minn,(n-id)%e);//折中考虑 二分
}
cout<<minn<<endl;
return 0;
}