zoukankan      html  css  js  c++  java
  • 5.10每日一题题解

    Alice, Bob and Candies

    涉及知识点:

    • 思维/双指针

    solution

    • (我们可以发现Alice是从左向右,Bob是从右向左进行吃糖果 ,这样的问题我们可以用双指针来做(不知道双指针的同学,可以百度了解一下))
    • (即然要使用双指针那么, 就要考虑一个问题)
    • (临界点是在哪?)
    • (通过分析题意,我们可以很轻松的得到, 临界点在于两个指针相等的时候,即在相等的时候判断结束)

    代码

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    ll ar[10010];
    int main()
    {
        ll n , m ;
        cin >>n;
        while(n--){
            cin >>m;
            for(int i=1;i<=m;i++)cin >>ar[i];
            ll a= ar[1], b=0;//a 是Alice吃的糖果总数, b是Bob吃的糖果总数
            ll aa = a, bb =0;//aa 是Alice吃一次的数量, b是Bob吃一次的数量
            ll num =0 ;//num是这个活动进行的总次数
            ll l =2, r =m;//因为第一个Alice已经吃了, 所以从第二个开始
            int flag =0;//判断现在是谁的回合
            while(l<=r){
                if(aa<=bb&&!flag){//Alice回合时候Alice目前吃的糖果少于上一次Bob吃的数量
                    aa +=ar[l];
                    a+=ar[l++];
                }
                else if(bb<=aa&&flag){//同理
                    bb +=ar[r];
                    b+=ar[r--];
                }
                if(aa>bb&&!flag){//Alice当前已经符合题目上说的条件可以轮到Bob
                    num ++ ;flag =1 ;
                    bb =0 ;
                }
                else if(bb>aa&&flag)
                {//同理
                    num ++ ;
                    flag=0 ;
                    aa=0 ;
                }
    
            }
            if(aa!=0 && bb!=0){//临界点判断
                num++;
            }
            if(m==1){//只有一个糖果的情况
                num++;
            }
            cout<< num <<" "<<a<<" "<<b<<endl;
        }
        return 0;
    }
    
    
  • 相关阅读:
    单个对象的内存管理分析
    在eclipse中引入jquery.js文件报错的解决方案
    ajax复习
    jquery介绍
    ajax调试小技巧
    ajax实现聊天室功能
    ajax(2)
    ajax经典案例--省市联动
    ajax技术返回json如何处理
    ajax如何处理返回的数据格式是xml的情况
  • 原文地址:https://www.cnblogs.com/QFNU-ACM/p/12862736.html
Copyright © 2011-2022 走看看