AT2290 【[AGC009A] Multiple Array】
洛谷终于能测AT了,点个赞。
话不多说,我们进入正题
本题主要测试选手的逆序思维
【part 1】题意简述
按下第i个按钮,a[1...i]全+1,求按多少个键试每个数为指定数的倍数
【part 2】算法&思路分析
十年OI一场空,不开longlong见祖宗。(haha)
请注意数据范围哦 作者为此调试一小时
因为按后面的按钮会影响前面的按钮,所以……
循环要倒着写
这其实就是本题重点了。剩下的咱模拟就行。
注意,求与b[i]倍数最小的差用( ( ( a[i] ) / b[i] ) + 1 ) * b[i] - a[i]
记得加上后面加的哟(^U^)ノ~YO
【part 3】代码分析
#include <iostream>
#include <cstdio>
using namespace std;
long long n , a[100005] , b[100005] , ans , num ;
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin >> n ;
for ( int i = 1 ; i <= n ; i ++ ) {
cin >> a[i] >> b[i] ;
}
for ( int i = n ; i > 0 ; i -- ) {
if ((a[i]+num)%b[i]) {//记住加num!
long long sum = ( ( ( a[i] + num ) / b[i] ) + 1 ) * b[i] - a[i] - num ;//记住加减num!
ans += sum , num += sum ;
}
}
cout << ans ;
return 0;
防抄袭
}

浙公网安备 33010602011771号