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删了,然后 上面两个判断 改成 》= 和<=

全部评论
这题0好恶心,很难想
1 回复 分享
发布于 04-06 12:44 福建
1 5 0 1 0 1 1 <ZZZZ
点赞 回复 分享
发布于 03-31 13:07 湖南
a[i]*a[i-1]爆int会判断错误
点赞 回复 分享
发布于 03-30 22:58 四川
i等于0时a[i-1]数组越界?
点赞 回复 分享
发布于 03-30 22:37 四川

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务