2021年YACS1月月赛丙组T1《分割队伍》 题解
反思
这道题考场上因为USACO一道很相似的题,就突然认为这道题是动态规划,后来突然发现这道题用一个简单的循环就能解决。
思路
输入\(n\)和\(a_i\),求所有\(a_i\)的和;循环遍历\(a\)数组,计算目前遍历到的所有\(a_i\)的和,再计算总和减去目前遍历的和(模拟分割,以得出两个队列分别的等待时间),求出两个队列等待时间的差的绝对值,使用打擂台求最小值,最后输出最小值即可
代码
/*
ID: zhangbe5
TASK: test
LANG: C++
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
ll n,a[maxn];
ll sum,t,t1,ans=INT_MAX;
int main(){
scanf("%lld",&n);
for(ll i=1;i<=n;i++){
scanf("%lld",&a[i]);
sum+=a[i];//求和
}
for(int i=1;i<=n;i++){
t+=a[i];//通过循环加和,实现分割
t1=sum-t;
ans=min(abs(t-t1),ans);//求最小差值
}
printf("%lld",ans);//输出
return 0;
}
她透过我的血,看到了另一抹殷红