Description
nn个城市,第个城市可以买到aiai瓶果汁,第ii个城市到第个城市需要走bibi天,每天需要喝mm瓶果汁,问能否在保证路上每天都有果汁喝的情况下从城市到nn城市
Input
第一行一整数表示用例组数,每组用例首先输入一整数nn表示城市个数,之后输入个整数a1,...,ana1,...,an表示nn个城市每个城市可以买到的果汁数,最后输入个整数b1,...,bn−1b1,...,bn−1,其中bibi表示ii城市到城市所需用时,所有值不超过10001000
Output
如果可以保证每天喝果汁的情况下从11城市到城市则输出YesYes,否则输出NoNo
Sample Input
2
4 1
3 2 1 4
1 2 3
4 2
2 4 6 8
3 2 1
Sample Output
Yes
No
Solution
简单题,只要判断是否对于任意2≤i≤n2≤i≤n有∑j=1i−1aj≥m⋅∑j=1i−1bj∑j=1i−1aj≥m⋅∑j=1i−1bj,维护a,ba,b序列前缀和即可
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int INF=0x3f3f3f3f,maxn=1005;
int T,n,m,a[maxn],b[maxn];
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]),a[i]+=a[i-1];
for(int i=1;i<n;i++)scanf("%d",&b[i]),b[i]+=b[i-1];
int flag=1;
for(int i=2;i<=n;i++)
if(a[i-1]<b[i-1]*m)flag=0;
printf("%s\n",flag?"Yes":"No");
}
return 0;
}