교육 Codeforces Round 90 (Rated for Div. 2) F. Network Coverage (2 점 또는 사고)
6692 단어 데이터 구조: 2 분 찾기사고수송 하 다.
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
The government of Berland decided to improve network coverage in his country. Berland has a unique structure: the capital in the center and nn cities in a circle around the capital. The capital already has a good network coverage (so the government ignores it), but the ii-th city contains aiai households that require a connection.
The government designed a plan to build nn network stations between all pairs of neighboring cities which will maintain connections only for these cities. In other words, the ii-th network station will provide service only for the ii-th and the (i+1)(i+1)-th city (the nn-th station is connected to the nn-th and the 11-st city).
All network stations have capacities: the ii-th station can provide the connection to at most bibi households.
Now the government asks you to check can the designed stations meet the needs of all cities or not — that is, is it possible to assign each household a network station so that each network station ii provides the connection to at most bibi households.
Input
The first line contains a single integer tt (1≤t≤1041≤t≤104) — the number of test cases.
The first line of each test case contains the single integer nn (2≤n≤1062≤n≤106) — the number of cities and stations.
The second line of each test case contains nn integers (1≤ai≤1091≤ai≤109) — the number of households in the ii-th city.
The third line of each test case contains nn integers (1≤bi≤1091≤bi≤109) — the capacities of the designed stations.
It's guaranteed that the sum of nn over test cases doesn't exceed 106106.
Output
For each test case, print YES, if the designed stations can meet the needs of all cities, or NO otherwise (case insensitive).
Example
input
Copy
5
3
2 3 4
3 3 3
3
3 3 3
2 3 4
4
2 3 4 5
3 7 2 2
4
4 5 2 3
2 3 2 7
2
1 1
10 10
output
Copy
YES
YES
NO
YES
YES
Note
In the first test case:
In the second test case:
In the third test case, the fourth city needs 55 connections, but the third and the fourth station has 44 connections in total.
제목:
n (< = 1e6) 개 도 시 는 하나의 고 리 를 구성 하고 도시 마다 인구 a [i] (< = 1e9), 용량 b [i] (< = 1e9) 가 있 으 며 i 번 째 도시 의 사람 은 i - 1 또는 i 번 째 도시 에 남아 모든 도시 의 인구 가 그 용량 을 초과 하지 않 고 YES 를 수출 할 수 있 는 지 물 어 볼 수 있다. 그렇지 않 으 면 NO.
사고: 두 가지 방법 이 있 는데 첫 번 째 방법 은 비교적 직관 적 이 고 첫 번 째 도시 가 첫 번 째 도시 에 남 겨 준 사람의 용량 이다.그 다음 에 남 은 용량 은 i + 1 개 도시 의 사람 에 게 남 겨 두 었 다. 이런 식 으로 미 루 면 마지막 으로 n 개 도시 의 잉여 용량 과 첫 번 째 도시 가 남 긴 용량 이 a [1] 를 충분히 수용 할 수 있 는 지 판단 하고 가능 하 다 면 바로 YES 이다.그렇지 않 으 면 중간 에 한 도시 의 인구 가 부족 하면 우 리 는 첫 번 째 도시 가 첫 번 째 도시 에 남 겨 진 사람의 용량 을 줄 이 고 마지막 에 a [1] 가 수용 하지 못 하면 남 겨 진 용량 을 높 일 것 이다.시간 복잡 도 O (nlog (1e9))
두 번 째 방법 은 하나의 배열 pre [i] 를 열 어 i 도시 에 남 은 사람 이 i - 1 도시 에 남 은 사람 수 를 기록 하 는 것 이다. b [i] 는 현재 도시 의 잉여 용량 을 나타 낸다.
처음에 b [1] 을 모두 a [2] 에 남 겨 두 었 습 니 다. 중간 에 용량 이 부족 하면 no 입 니 다. 그렇지 않 으 면 n - 1 번 도시 부터 b [i - 1] + = min (b [i], pre [i]) (이 식 을 잘 생각 하 세 요).마지막 으로 b [1] + b [n] 가 a [1] 보다 큰 지 판단 하면 됩 니 다.시간 복잡 도 O (n)
코드 (2 점):
#include
#define ll long long
#define inf 0x3f3f3f3f
#define mst(head,x,n) memset(head+1,x,n*sizeof(head[0]))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dep(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
const int maxn=2e6+5;
//const double pi=acos(-1.0);
//const double eps=1e-9;
//const ll mo=1e9+7;
int n,m,k;
int a[maxn],c[maxn],b[maxn];
int ans,tmp,cnt;
int flag;
int d[maxn];
bool ok[maxn];
template
inline void read(T &X){
X=0;int w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
if(w) X=-X;
}
int jud(int x){
int res=b[0]-x;
rep(i,1,n-1){
if(a[i]>res+b[i]) return 0;
if(res>=a[i]) res=b[i];
else res=b[i]-(a[i]-res);
}
if(res+x>=a[0]) return 1;
return 2;
}
void solve(){
rep(i,0,n-1) read(a[i]);
rep(i,0,n-1) read(b[i]);
int l=0,r=b[0];
while(l<=r){
int mid=(l+r)>>1;
int ans=jud(mid);
if(ans==1) {
puts("YES");
return ;
}
if(!ans) r=mid-1;
else l=mid+1;
}
puts("NO");
}
int main(){
/*
#ifdef ONLINE_JUDGE
#else
freopen("D:/Temp/in.txt", "r", stdin);
#endif
*/
int T,cas=1;
read(T);
while(T--)
{
read(n);
solve();
}
return 0;
}
코드 (pre 레코드):
#include
#define ll long long
#define inf 0x3f3f3f3f
#define mst(head,x,n) memset(head+1,x,n*sizeof(head[0]))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dep(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
const int maxn=2e6+5;
//const double pi=acos(-1.0);
//const double eps=1e-9;
//const ll mo=1e9+7;
int n,m,k;
ll a[maxn],c[maxn],b[maxn];
int ans,tmp,cnt;
int flag;
ll pre[maxn];
bool ok[maxn];
template
inline void read(T &X){
X=0;int w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
if(w) X=-X;
}
int solve(){
read(n);
rep(i,0,n-1) read(a[i]);
rep(i,0,n-1) read(b[i]);
rep(i,0,n-1){
if(b[(i-1+n)%n]+b[i]=a[i]){
pre[i]=a[i];
b[i-1]-=a[i];
}
else {
pre[i]=b[i-1];
b[i-1]=0;
b[i]-=(a[i]-pre[i]);
if(b[i]<0) return 0;
}
}
dep(i,n-2,1){
b[i-1]+=min(pre[i],b[i]);
if(b[i-1]<0) return 0;
}
if(b[0]+b[n-1]>=a[0]) return 1;
return 0;
}
int main(){
/*
#ifdef ONLINE_JUDGE
#else
freopen("D:/Temp/in.txt", "r", stdin);
#endif
*/
int T,cas=1;
read(T);
while(T--)
{
if(solve()) puts("YES");
else puts("NO");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
우 객 망 여름 ACM 다 교 훈련소 (제4 회) J Hash Function / CCPC - Wannafly Winter Camp Day 7 (Div2, 현장) E 선형 탐사 법As a beginner, Chiaki simply chooses a hash table of size n with hash function h(x)=xmodnh(x)=xmodn. (두 문제 의 차 이 는 입력 과 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.