社区讨论
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 条回复,欢迎继续交流。
正在加载回复...