• 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;
    } 
    
  • 相关阅读:
    Vue基础第三章
    Vue基础第二章
    Vue基础第一章
    AWS笔记
    导入Dynamic Web Project后程序有红叉但是可以运行
    JSTL配置文件下载地址
    access纯jdbc连接
    XML学习总结二——DTD
    【转】无题
    XML学习总结一
  • 原文地址:https://www.cnblogs.com/pureayu/p/14415494.html
Copyright © 2020-2023  润新知