zoukankan      html  css  js  c++  java
  • hdu 4972 根据每轮篮球赛分差求结果

    http://acm.hdu.edu.cn/showproblem.php?pid=4972

    两支球队进行篮球比赛,每进一次球后更新比分牌,比分牌的计数方法是记录两队比分差的绝对值,每次进球的分可能是1,2,3分。给定比赛中的计分情况,问说最后比分有多少种情况。

    分情况讨论即可:

    相邻计分之差大于3或者相等并且不等于1的话,为非法输入

    相邻计分为1-2或者2-1的时候,会对应有两种的的分情况

    其他情况下,不会造成新的比分情况产生

    需要特判对于最后一次比分差为0的情况,就没有谁赢谁输一说。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    
    int main()
    {
        long long T,n,cas=0,ok,l,r,ans;
        long long a[110000];
    
        scanf("%I64d",&T);
        while (T--){
            cas++;
            scanf("%I64d",&n);
            for (int i=1;i<=n;i++) scanf("%I64d",&a[i]);
            a[0]=0;
            l=0;
            r=0;
            ok=1;
            if (n==0){
                printf("Case #%I64d: 1
    ",cas);
                continue;
            }
            for (int i=1;i<=n;i++){
                if (a[i]<0 || abs(a[i]-a[i-1])>3) {ok=0;break;} else
                if (a[i]==a[i-1] && (a[i]!=1 || a[i-1]!=1)) {ok=0;break;} else
                if (a[i-1]==1 && a[i]==1) {l+=1;r+=1;}  else
                if (a[i-1]==1 && a[i]==2) {r+=2;}  else
                if (a[i-1]==2 && a[i]==1) {l+=1;r+=1;}  else
                if (a[i-1]<a[i]) r+=abs(a[i]-a[i-1]);else
                if (a[i-1]>a[i]) l+=abs(a[i]-a[i-1]);
    
        //        printf("%d %d
    ",l,r);
            }
            if (!ok) ans=0;else
                if (a[n]==0)
                    ans=(r-l-a[n]+1); else
                    ans=(r-l-a[n]+1)*2;
            printf("Case #%I64d: %I64d
    ",cas,ans);
        }
        return 0;
    }


  • 相关阅读:
    23.Vue技术栈开发实战-Icon组件
    shell脚本每行后面多了一个^M的原因和解决办法
    mmap概述
    camera otp介绍
    brk实现
    USB技术浅析
    带你遨游USB世界
    echarts 更换主题颜色
    Hive UDAF介绍与开发
    2020湖北高考理科第一名唐楚玥的学习方法演讲
  • 原文地址:https://www.cnblogs.com/zibaohun/p/4046827.html
Copyright © 2011-2022 走看看