zoukankan      html  css  js  c++  java
  • Alice, Bob and Candies(双指针)

    传送门



    • 一道比较正宗的双指针题目

    • 两个人各取一边,往中间走,其实没啥好说的,思路很简单,不过细节很多,需要注意。

    • 需要5个变量,一个是最后总共有多少次move,一个是保存Alice吃了多少,一个是保存了Bob吃了多少。还有两个属于临时变量,一个保存Alice这一次吃了多少,一个保存Bob这次吃了多少,这两个变量用于比较。

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 1010;
    int a[N];
    bool vis[N];
    
    void solve(){
    	memset(vis, 0, sizeof vis);
    	int n;
    	cin >> n;
    	for(int i = 1; i <= n; i ++) cin >> a[i];
    	int ansa = a[1], ansb = 0, cnt = 0, i = 1, j = n + 1;
    	int ta = a[1], tb = 0;
    	bool flag = true;
    	vis[1] = true;
    	if(n == 1){
    		cout << 1 << ' ' << a[1] << ' ' << 0 << endl;
    		return;
    	}
    	ta = a[1];
    	while(i < j){
    		if(i + 1 == j){
    			cout << cnt << ' ' << ansa << ' ' << ansb << endl;
    			return;
    		}
    		while(ta <= tb){
    			i ++;
    			if(vis[i]){
    				cout << cnt + 1 << ' ' << ansa << ' ' << ansb << endl;
    				return;
    			}
    			ta += a[i];
    			ansa += a[i];
    			vis[i] = true;
    		}
    		cnt ++;
    		tb = 0;
    		if(j - 1 == i){
    			cout << cnt << ' ' << ansa << ' ' << ansb << endl;
    			return;
    		}
    		while(tb <= ta){
    			j --;
    			if(vis[j]){
    				cout << cnt + 1 << ' ' << ansa << ' ' << ansb << endl;
    				return;
    			}
    			tb += a[j];
    			ansb += a[j]; 
    			vis[j] = true;
    		}
    		cnt ++;
    		ta = 0;
    	}
    }
    int main(){
    	int t;
    	cin >> t;
    	while(t --){
    		solve();
    	}
    	
    	return 0;
    } 
    
  • 相关阅读:
    Log4Net_LayOut
    各种数据库的批量插入操作_Oracle
    关于各种数据库 Insert时同时取到Id的操作
    一个小型的DBHelper的诞生(1)
    设计模式:重读(抽象工厂模型)
    设计模式:重读(单例)
    设计模式:重读(导读)
    17 1
    5
    oj 2.2
  • 原文地址:https://www.cnblogs.com/pureayu/p/14415494.html
Copyright © 2011-2022 走看看