社区讨论

40分求调,壶关

P13278「CZOI-R4」PVP参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mhjlk5os
此快照首次捕获于
2025/11/04 04:32
4 个月前
此快照最后确认于
2025/11/04 04:32
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

int n,m,q,g = 0,si,flag = 0;
int a[1000010],x,sum=0,sum1=0,gong[1000010],xue[1000010],xue1[1000010],ji[1000010],jiq[1000010];
double o; 
// sum敌人扣血,sum1自己扣血,gong[i]是到i的攻击次数,xue[i]是到i正常对方剩的血,ji[i]是i位至少要多少次可以击杀对方,jiq是倒序 

int main(){
	cin >> n >> m >> q;
	for(int i = 1;i<=n;i++){
		cin >> a[i];
		if(a[i] > 0){
			sum += a[i];
			g++;
		}else{
			sum1 -= a[i] ;
		}
		xue[i] = m - sum;
		xue1[i] = m - sum1;
		if(abs(sum1) >= m and flag ==0){
			si = i;
			flag = 1;
		}
		gong[i] = g;
//		cout <<"xue[i]="<<xue[i]<<" gong[i]="<<gong[i]<<endl;
		o = xue[i]*1.0 / gong[i]*1.0;
//		cout << "o="<<o<<endl;
		if(gong[i] != 0){
			ji[i] = ceil(o);
		}else{
			ji[i] = INT_MAX;
		}
		
	}
	if(si == 0){
		si = n+1;
	}
	
//	cout << endl << "ji[i] == ";
//	for(int i = 1;i<=n;i++){
//		cout << ji[i]<<" ";
//	}cout << endl;
	
//	cout << " si= "<<si<<endl;
	
//	cout << endl << "si="<<si<< "gong[i] == ";
//	for(int i = 1;i<=n;i++){
//		cout << gong[i]<<" ";
//	}cout << endl;

//	cout <<" xue[i] == "; 
//	for(int i = 1;i<=n;i++){
//		cout << xue[i]<<" ";
//	}cout << endl;
//	
	for(int i = n,o = 1;i>=1;i--,o++){
		jiq[o] = ji[i];
//		cout << "jiq[o]=="<<jiq[o]<<" ";
	}//cout << endl;
	int xb;
	
	
	for(int i = 1;i<=q;i++){
		cin >> x;
		if(n == 1){
			jiq[2] = INT_MAX;
			xb=upper_bound(jiq+1,jiq+n+1+1,x) - jiq-1;
		}else{
			xb=upper_bound(jiq+1,jiq+n+1,x) - jiq-1;
		}
		
		
		flag = 0;
//		cout <<" xb == "<<xb<<" si== "<<si<<endl;
		
		if((xb == 0 and si!=n+1) or xb >= si or(xb!=0 and jiq[n]==INT_MAX)){
		
			cout << "No"<<endl;
		}
		
		else if((xb == 0 and jiq[1] < 0) or xb!=0){
			if(xb < si){
			
				cout << "Yes"<<endl;
			} 
		} else{
			
			cout << "Tie"<<endl;
		}
			
			
			
//			cout <<"xiabiao == "<<xiabiao<<endl;
//			for(int j = 1;j<si;j++){
//				
//				if(x >= ji[j]){
//					
//					flag = 1;
//					break;
//				} 
//			}
//			if(flag == 0 and xue[n] > 0 and xue1[n] > 0){
//				cout << "Tie"<<endl;
//				flag = 1;
//			}
//			if(flag == 0){
//				cout << "No"<<endl;
//			}
	
		}
	
//	for(int i = 1;i<=q;i++){
//		cin >> x;
//		if(sum >= m and abs(sum1) <n){
//			cout << "Yes"<<endl;
//		}
//		else{
//			flag = 0;
//			for(int i = 1;i<=si;i++){
//				if(xue[i] - gong[i]*x <= 0){
//					cout << "Yes" << endl;
//					flag = 1;
//					break;
//				}
//			} 
//			if(flag == 0 and xue[n] > 0 and xue1[n] > 0){
//				cout << "Tie"<<endl;
//				flag = 1;
//			}
//			if(flag == 0){
//				cout << "No"<<endl;
//			}
//	
//		}
//	}
	return 0;
}  
/*
3 1 1
-1 1 1
1


1 100 1
1
100

6 7 2
-2 -3 -3 1 1 1
1
2

1 1 1
-1 
1

10 100 1
-50 1 1 1 1 1 1 1 -50 10
10
*/

回复

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

正在加载回复...