【CodeForces訓練記錄】Codeforces Round 986 (Div. 2)

MNNUACM_2024ZY發表於2024-11-11

訓練情況

賽後反思

C題逆風翻盤,可能勉強青名了。A題愣神了,我覺得還能再做的快一點。

A題

給定一個字串,NWSE,重複著字串走,我們直接模擬即可,用 while 來判斷是否走到終點,然後對於不可能走到的終點,我選擇了一個不會超時的步數範圍,超出就跳出 while 即可,最後判斷人有沒有在 \((a,b)\) 即可。

#include <bits/stdc++.h>
#define int long long

using namespace std;

void solve(){
	int n,a,b; string s;
	cin>>n>>a>>b;
	cin>>s;
	int tot = 0;
	int x = 0,y = 0;
	while(tot <= 100000 && !(x == a && y == b)){
		if(s[tot%n] == 'N') y++;
		else if(s[tot%n] == 'S') y--;
		else if(s[tot%n] == 'W') x--;
		else if(s[tot%n] == 'E') x++;
		// cout<<x<<" "<<y<<endl;
		tot++;
	}
	if(x == a && y == b) cout<<"YES"<<endl;
	else cout<<"NO"<<endl;
}

signed main(){
	int T; cin>>T; while(T--)
	solve();
	return 0;
}

C題

這題其實挺難看出一個二分單調性的,我們選擇二分給自己的美味值,如果這個值過大會讓剩下的不夠分,過小會讓剩下的太多,對於自己的美味值,由於切出來是連續的,我們可以透過雙指標來找到自己左右邊界,再維護一個前字尾 \(> v\) 的個數,判斷左右邊界的個數和是否能 \(\ge m\) 即可。

#include <bits/stdc++.h>
#define int long long

using namespace std;

const int N = 2e5 + 3;

int n,m,v;
int sum;
vector<int> a(N);
vector<int> pre(N);
vector<int> suf(N);

bool pd(int x){
	int l = 1,r = 1,now = 0;
	for(r = 1;r<=n;r++){
		now += a[r];
		while(now - a[l] >= x && l <= r) now-=a[l],l++;
		if(now >= x){
			if(pre[l-1] + suf[r+1] >= m){
				// cout<<x<<" "<<l<<" "<<r<<endl;
				return true;
			}
		}
	}
	return false;
}

void solve(){
	cin>>n>>m>>v;
	sum = 0;
	for(int i = 1;i<=n;i++) cin>>a[i],sum+=a[i];
	for(int i = 1;i<=n;i++) pre[i] = 0,suf[i] = 0;
	int now = 0;
	for(int i = 1;i<=n;i++){
		now+=a[i];
		if(now >= v) now = 0,pre[i]++;
	}
	now = 0;
	for(int i = n;i;i--){
		now+=a[i];
		if(now >= v) now = 0,suf[i]++;
	}
	for(int i = 1;i<=n;i++) pre[i] += pre[i-1];
	for(int i = n;i;i--) suf[i] += suf[i+1];
	// for(int i = 1;i<=n;i++) cout<<pre[i]<<" "; cout<<endl;
	// for(int i = 1;i<=n;i++) cout<<suf[i]<<" "; cout<<endl;
	int l = 0,r = sum,m;
	while(l<r){
		m = l + r + 1 >> 1;
		if(pd(m)) l = m;
		else r = m - 1;
	}
	if(pd(r)) cout<<r<<endl;
	else cout<<-1<<endl;
}

signed main(){
	int T; cin>>T; while(T--)
	solve();
	return 0;
}

相關文章