NC16518. 下棋
描述
输入描述
第一行一个正整数n表示棋盘大小。
第二行n个非负整数a_1, a_2, …, a_n 表示一开始 (1,i) 上有几个棋子。
第三行n个非负整数b_1, b_2, …, b_n 表示目标局面里 (1,i) 上有几个棋子。保证 1 ≤ n ≤ 100,000,
输出描述
输出一个非负整数,表示最少需要几次操作。
示例1
输入:
5 0 0 1 1 0 1 0 0 0 1
输出:
9
说明:
先把(1,3)上的棋子走到(1,1),花费了2次操作。C++11(clang++ 3.9) 解法, 执行用时: 84ms, 内存消耗: 2408K, 提交时间: 2020-03-29 15:45:19
#include<vector> #include<iostream> using namespace std; typedef long long ll; int main() { int n; cin>>n; vector<int> a(n),b(n); for(int &e:a) cin>>e; for(int &e:b) cin>>e; ll ans=0,sum=0; for(int i=n-1;i>=1;--i) { sum+=b[i]-a[i]; if(sum>0) { ans+=sum*i; sum=0; } else { ans-=sum; } } cout<<ans<<endl; return 0; }