Educational Codeforces Round 50

我打教育场就没上过分,一直被教育。。。

当晚的环境也不是很好,舍友在开黑打王者,mmp

数学专场------

A

显然,高度增加的要平均

 
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main(){
	ll n, k;
	cin >> n >> k;
	if(k % n == 0)
		cout << k / n << endl;
	else
		cout << k / n + 1 << endl;
	return 0;	
}

B

几乎推了2h,越推越懵逼,现在反思一下,我当时把横向和纵向两个过程看得太过于独立了,人为的分了先后,并且一直以对角线上的运动为切入点,即认为所以点都可以看做是从对角线移动过去的。总之死的很惨啦

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main(){
	ll n, m, k;
	ll q, ans;
	cin >> q;
	while(q --){
		cin >> n >> m >> k;
		ans = k;
		if(max(n, m) > k){
			cout << -1 << endl;
			continue ;
		}
		else{
			if(k % 2 != n % 2)
				ans --;
			if(k % 2 != m % 2)
				ans --;
			cout << ans << endl;
		}
	}
	return 0;
}

D

比赛结束5min时发现这是道大水题,于是噼里啪啦一顿乱敲,压线没编译交了发,wa1.。。。。

这题就是维护两个位置不断相加的过程

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const int N = 300300;

int n, m;
int a[N], b[N];

int main(){
	scanf("%d", &n);
    for(int i = 0; i < n; i ++)
    	scanf("%d", &a[i]);
    scanf("%d", &m);
    for(int i = 0; i < m; i ++) 
    	scanf("%d", &b[i]);
    ll sum1 = 0, sum2 = 0;
    for(int i = 0; i < n; i ++) 
		sum1 += a[i];
    for(int i = 0; i < m; i ++) 
		sum2 += b[i];
    if(sum1 != sum2){
        cout << -1 << endl;
        return 0;
    }
    
    int posa = 0, posb = 0;
    int res = 0;
    while(posa < n){
        res ++;
        ll suma = a[posa ++], sumb = b[posb ++];
                
        while(suma != sumb){
            if(suma < sumb) suma += a[posa ++];
            else sumb += b[posb ++];
        }
    }
    cout << res << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38759433/article/details/82559602