1 条题解

  • 1
    @ 2025-8-24 21:22:01

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar X_WT
    Unknown

    搬运于2025-08-24 21:22:00,当前版本为作者最后更新于2018-10-31 12:50:36,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    本蒟蒻觉得题解太少而且我看不懂 因此决定发步第一篇题解 希望有帮助 介绍一下大致思路:先将每一次扔球得到分数计算在数组里,然后循环判断得出每一轮的分数

    #include<bits/stdc++.h>
    using namespace std;
    int work(char t){
    	if(t=='/')	return 10;
    	return t-'0';
    }				//将字符转化成分数 
    int main(){
    	string s;
    	getline(cin,s);//输入字符串 
    	int ans=0,gro[30]={-1,0,0},sco[30],i,j=1,k=1,a[15]={0},times=1;
    	int len=s.length();//解释一下:gro[i]表示第i个数是gro[i]轮的 
    	for(i=0;i<30;i++)	sco[i]=-1;//sco[i]表示第i次的分数 ,先全部赋-1 
    	for(i=0;i<len;i++){
    		if(s[i]==' '){
    			continue;		//空格当然不能算在内 
    		}
    		gro[j]=k;//i,j相互独立,本句表示 gro[j] 属于第多少轮 
    		sco[j]=work(s[i]);		//得到分数 
    		if(sco[j]==10)	k++;//满分,直接下一轮 
    		else if(gro[j]==gro[j-1])	k++;//扔满2次,下一轮 
    		if(gro[j]==gro[j-1]&&sco[j]==10)
    			sco[j]-=sco[j-1];//第二次为10分时,其成绩改成撞倒的瓶子数而不是10 
    		j++;		//下一次扔球 
    	}
    	int tmp=j;			//扔球次数 
    	for(i=1,j=1;i<=tmp;i++){
    		if(sco[i]==10){
    			if(sco[i+1]==-1||sco[i+2]==-1)	break;	//这句很重要,保证第一次一轮
    			a[j++]=sco[i]+sco[i+1]+sco[i+2];		//成绩计算不出时可以结束
    			times++;								//times意思是有分数的轮数 
    			continue;
    		}
    		if(gro[i]==gro[i+1]){
    			if(sco[i+1]==-1||sco[i+2]==-1)	break;	//同理上面 
    			if( (sco[i]+sco[i+1]) ==10 ){
    				if(sco[i+2]==-1)	break;
    				a[j++]=sco[i]+sco[i+1]+sco[i+2];//表示这轮第一次开始向后,总共3次的成绩之和 
    				times++;//为了这边计算方便,我在上面将10换掉 
    				i++;continue;//加上循环的i+1,i向后2个
    			}
    			else{
    				a[j++]=sco[i]+sco[i+1];
    				times++;i++;//很可惜,没有击倒所有瓶子
    			}
    		}
    	}
    	times=min(times,11);//防止额外的轮数和不足10次的轮数 
    	for(i=1;i<times;i++)	cout<<a[i]<<' ';
    	cout<<endl;
    	for(i=1;i<times;i++){
    		ans+=a[i];	//得出每一次的总分 
    		cout<<ans<<' ';
    	}
    	return 0;	//华丽结束 
    }
    
    • 1

    信息

    ID
    168
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    2
    已通过
    1
    上传者