C求助 q求HACK
#include<bits/stdc++.h> #define int long long using namespace std; int a[3000010]; int b[3000010]; string s; void slove(){ int n; int ans=0; ans=0; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } cin>>s; // // 找 第一个连续Z // int idx=-1; // for(int i=0;i<n;i++){ // idx=i; // if(s[i]!='Z'){ // break; // } // } // // 判断是改负的Z好还是正的Z好。 // int ans1=0,ans2=0; // // 全部变成负数。 // for(int i=0;i<idx;i++){ // if(a[i]>0){ // ans1++; // } // if(a[i]<0)ans2++; // } // ans+=min(ans1,ans2); // 计算一定要修改的情况 for(int i=0;i<n;i++){ if(a[i]>0&&s[i]=='<'){ ans++; a[i]=-2; }else if(a[i]<0&&s[i]=='>'){ ans++; a[i]=2; }else if(a[i]==0){ if(s[i]=='>'){ ans++; a[i]=1; }else if(s[i]=='<'){ ans++; a[i]=-1; }else { ans++; if(a[i-1]<0){ a[i]=-1; }else if(a[i-1]>0){ a[i]=1; } } } } // 判断是否满足的情况 for(int i=0;i<n;i++){ if(s[i]=='Z'){ if(a[i]*a[i-1]<=0){ ans++; if(a[i-1]>0)a[i]=1; else a[i]=-1; } } } // for(int i=0;i<n;i++){ // cout<<a[i]<<" "; // } cout<<ans<<endl; } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t; cin>>t; while(t--){ slove(); } }
为什么把单独判断0 去掉 直接>= <= 却AC了呢? 就是把a[i]==0删了,然后 上面两个判断 改成 》= 和<=