Subtask #4全WA,用的模拟栈
查看原帖
Subtask #4全WA,用的模拟栈
1255488
__notTrueLight__楼主2024/7/16 21:03
#include<iostream>
using namespace std;

/*模拟栈,操作数,栈顶*/
int box[514114][2],n,btoxp=0;
/*团子没法吃了(悲)*/ 

unsigned long long k,res;
/*购买数量,价格总和*/

int main(){
  	//输入 操作数;
	scanf("%d",&n);
  	//输入 所有操作;
	for(int i=0,mod,l,r;i<n;i++){
      	//输入 制作或卖出;
		scanf("%d",&mod);
      	//若 制作;
		if(mod==1){
          		//输入 团子颜色 的首尾;
			scanf("%d %d",&l,&r);
          		//打包 并 压入栈中;
			box[btoxp][0]=l;
			box[btoxp][1]=r;
          		//栈顶+1;
			btoxp++;
        	//若 卖出;
		}else if(mod==2){
          		//输入 卖出数量
			scanf("%llu",&k);
          		//初始化 价格总和;
			res=0;
          		//开始 拿出团子;
			while(k){
              			//若 下一包团子 过多;
				if(box[btoxp-1][1]-box[btoxp-1][0]+1>k){
                  			//拆开包装;
					res+=(box[btoxp-1][1]*2-k+1)*k/2;
                  			//把团子 拿出 并 计费;
					box[btoxp-1][1]-=k;
                  			//结束 拿出团子;
					break;
                		//否则 若 下一包团子 刚好;
				}else if(box[btoxp-1][1]-box[btoxp-1][0]+1==k){
                  			//把包装 弹出 并 计费;
					res+=(box[btoxp-1][1]+box[btoxp-1][0])*k/2;
                  			//栈顶-1;
					btoxp--;
                  			//结束 拿出团子;
					break;
				}else{//否则 下一包团子 必然 过少
                  			//将 这包团子 弹出 并 计费;
					res+=(box[btoxp-1][1]+box[btoxp-1][0])*(box[btoxp-1][1]-box[btoxp-1][0]+1)/2;
                  			//还要买的数量 减少 这包团子的数量;
					k-=(box[btoxp-1][1]-box[btoxp-1][0]+1);
                  			//栈顶-1;
					btoxp--;
				}
			}
          	//输出 价格总和;
			printf("%llu\n",res);
		}else{//下面两行 永远 不 运行;
			printf("Input Error!!!\n");
			printf("Error Code:IE");
		}
	}

	return/*结束*/0;
}
2024/7/16 21:03
加载中...