Codeforces Round 974 (Div. 3)

比赛地址 :  

Dashboard - Codeforces Round 974 (Div. 3) - Codeforcesicon-default.png?t=O83Ahttps://codeforces.com/contest/2014

A

模拟

#include
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;

#define endl '\n'
typedef long long LL;
#define pb push_back
#define eb emplace_back
#define PII pair
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define int long long

const int N = 2e5 + 10 ;
const int Mod = 1e9 + 7 ;
// int xx[] = { 1,0,-1,0 };
// int yy[] = { 0,1,0,-1 };

LL qmi(LL m, LL k){LL res = 1 % Mod, t = m;while (k){if (k&1) res = res * t % Mod;t = t * t % Mod;k >>= 1;}return res;}


inline void solve(){
	int n , k  ; cin >> n >> k ;
	vector a(n) ;
	for(int& x : a) cin >> x ;
	int p = 0 , ans = 0 ;
	for(int i=0;i=k) p+=a[i] ;
		else if(p>0&&a[i]==0){
			p--;ans ++ ;
		}
	} 
	cout << ans << endl ;
}
 
signed main(){
    IOS
    int _ = 1;
    cin >> _;
    while(_ --) solve();
    return 0;
}

B

只用分情况(奇偶)讨论即可 ;

#include
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;

#define endl '\n'
typedef long long LL;
#define pb push_back
#define eb emplace_back
#define PII pair
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define int long long

const int N = 2e5 + 10 ;
const int Mod = 1e9 + 7 ;
// int xx[] = { 1,0,-1,0 };
// int yy[] = { 0,1,0,-1 };

LL qmi(LL m, LL k){LL res = 1 % Mod, t = m;while (k){if (k&1) res = res * t % Mod;t = t * t % Mod;k >>= 1;}return res;}


inline void solve(){
	int n , k ; cin >> n >> k ;
	// n-k+1,n
	if(n&1){
		if(k==1) cout << "No" << endl ;
		else{
			// 多少个奇数
			int t = 0 ;
			if(k%2==0) t = k/2 ;
			else t=k/2+1;
			if(t&1) cout << "NO" << endl ; 
			else cout << "Yes" << endl ;
		}
	}else{
		if(k==1) cout << "yes" << endl ;
		else{
			int t = 0 ;
			if(k%2==0) t = k/2 ;
			else t=k/2;
			if(t&1) cout << "NO" << endl ; 
			else cout << "Yes" << endl ;
		}
	}
}
 
signed main(){
    IOS
    int _ = 1;
    cin >> _;
    while(_ --) solve();
    return 0;
}

 C

也是模拟,找到最小不满足哪一个,求出应满足的最小值+1减去原来的sum即可 ;

#include
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;

#define endl '\n'
typedef long long LL;
#define pb push_back
#define eb emplace_back
#define PII pair
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define int long long

const int N = 2e5 + 10 ;
const int Mod = 1e9 + 7 ;
// int xx[] = { 1,0,-1,0 };
// int yy[] = { 0,1,0,-1 };

LL qmi(LL m, LL k){LL res = 1 % Mod, t = m;while (k){if (k&1) res = res * t % Mod;t = t * t % Mod;k >>= 1;}return res;}


inline void solve(){
	int n ; cin >> n ;
	vector a(n) ;
	int sum = 0 ;
	for(int& x : a) cin >> x , sum += x ;
	if(n<=2){cout << -1 << endl ; return ;}
	sort(all(a)) ;
	int p = a[n/2] ;
	// 平均财富>p*2;
	int ans = 2*p*n-sum ;
	if(ans<0) cout << 0 << endl ;
	else cout << ans+1 << endl ; 
	
}
 
signed main(){
    IOS
    int _ = 1;
    cin >> _;
    while(_ --) solve();
    return 0;
}

D

二分 + 差分

#include
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;

#define endl '\n'
typedef long long LL;
#define pb push_back
#define eb emplace_back
#define PII pair
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define int long long

const int N = 2e5 + 10 ;
const int Mod = 1e9 + 7 ;
// int xx[] = { 1,0,-1,0 };
// int yy[] = { 0,1,0,-1 };

LL qmi(LL m, LL k){LL res = 1 % Mod, t = m;while (k){if (k&1) res = res * t % Mod;t = t * t % Mod;k >>= 1;}return res;}

int n , d , k;

bool cmp(PII& x, PII& y){
	if(x.fi==y.fi) return x.se> n >> d >> k ;
	vector a(k) ;
	vector h(n+2,0) ,t(n+1,0);
	for(int i=0;i> a[i].fi >> a[i].se ;
		t[a[i].fi]++ ;
		h[a[i].fi]++ ;
		h[a[i].se+1]-- ;
	}
	vector p(n+2,0) ;
	for(int i=1;i<=n;i++) p[i] = p[i-1] + h[i] ;
	sort(all(a),cmp) ;
	vector cnt(n+1,0) ;
	int la = n-d+1 ; 
	for(int i=1;i<=la;i++){
		int ed = i+d-1;
		// st>=i的下标
		int l = -1 , r = k ;
		while(l+1>1 ;
			if(a[mid].fi>=i) r = mid ;
			else l = mid ;
		}
		int L = r ;
		// st<=ed的下标 
		l = L-1  ; r = k ;
		while(l+1>1 ;
			if(a[mid].fi<=ed) l = mid ;
			else r = mid ;
		}
		int R = l ;
		if(R>=L) cnt[i] += R-L+1 ;
		//上面区间一定满足
		// fi=i
		//l = -1 ; r = L ;//双开区间 
		// 不一定有序 , 所以不能二分 
		cnt[i] += p[i]-t[i] ;
	}
	int ma = -1 , mi = 2e18 ;
	int r1 = -1 , r2 = -1 ;
	for(int i=1;i<=la;i++){
		// cout << cnt[i] << " " ;
		if(cnt[i]>ma) ma = cnt[i],r1=i;
		if(cnt[i]> _;
    while(_ --) solve();
    return 0;
}

你可能感兴趣的:(算法学习,CF,cocoa,macos,objective-c)