社区讨论

求助90差#17和#19

P8563 Magenta Potion参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo7wmyte
此快照首次捕获于
2023/10/27 08:58
2 年前
此快照最后确认于
2023/10/27 08:58
2 年前
查看原帖
为什么会90呢??? 17和19两个测试点为啥会WA 大样例对拍都过了
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k;
int a[200005];
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		
	}
	
	int temp;
	int l,r;
	for(int i=0;i<m;i++){
		cin>>temp>>l>>r;
		if(temp==1){
			a[l]=r;
		}
		else{
			if(l>r){
				cout<<1<<endl;
				continue;
			}
			if((r-l)>100){
				cout<<"Too large"<<endl;
				continue;
			}
			int fs=0,x,y;
			for(int j=l;j<=r;j++){
				if(a[j]<0){
					fs++;
					if(fs==1){
						x=j;
					}
				}
			}
			for(int j=r;j>=l;j--){
				if(a[j]<0){
					y=j;
					break;
				}
			}
			if(fs%2==0 || fs==0){//必为正数
				if((r-l)>30){
					cout<<"Too large"<<endl;
					continue;
				}
				else{
					int ans=1;bool pd=0;
					for(int j=l;j<=r;j++){
						ans*=a[j];
						if(ans>1073741824){
							cout<<"Too large"<<endl;
							pd=1;
					        break;
						}
					}
					if(pd==0) cout<<ans<<endl;
				}
			}
			else{//
				int ans1=1;	int ans2=1;bool pd=0;
				for(int j=l;j<y;j++){
					ans1*=a[j];
					if(ans1>1073741824){
						cout<<"Too large"<<endl;
						pd=1;
					    break;
					}
				}
				if(pd==0){
					for(int j=x+1;j<=r;j++){
					     ans2*=a[j];
					     if(ans2>1073741824){
						    cout<<"Too large"<<endl;
						    pd=1;
					        break;
					    }
				    }
				}
				
				if(pd==0) cout<<max(ans1,ans2)<<endl;
				
			}
		}
	}
}

回复

2 条回复,欢迎继续交流。

正在加载回复...