视频题解


A

#include <iostream>
using namespace std;

int main() {
    int y, m, d;
    // 输入2026年的某个日期(题目保证在2月17日之前)
    cin >> y >> m >> d;
    
    int ans;
    if (m == 1) {
        // 1月份:1月有31天,先算1月剩余天数,再加2月的17天
        ans = (31 - d) + 17;
    } else {
        // 2月份:直接用17减去当前日期
        ans = 17 - d;
    }
    
    cout << ans << endl;
    
    return 0;
}

B

#include <iostream>
using namespace std;

int main() {
    int n, m, a, b;
    cin >> n >> m >> a >> b;
    // 检查原始尺寸或旋转后尺寸是否能放入
    if ((a <= n && b <= m) || (a <= m && b <= n)) {
        cout << "Happy New Year" << endl;
    } else {
        cout << "Sorry" << endl;
    }
    return 0;
}

C

通过样例可以发现,找到某处最靠前的位次 pp,之后 pnp\sim n 的位置都是可以的。

前方至少 aa 人:pa+1p\geq a+1

后方之多 bb 人:npbn-p\le b

综合则有:pmax(a+1,nb)p\geq max(a+1,n-b)

#include <iostream>
#include <algorithm> 

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t; cin >> t;
    while(t--) {
        int n, a, b;
        cin >> n >> a >> b;
        
        int low = max(a + 1, n - b);
        int ans = (low > n) ? 0 : (n - low + 1);
        
        cout << ans << endl;
    }
    return 0;
}

D

按照题目模拟,计算当前的连续空档期是否能分配任务即可

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6;
#define ll long long
int T;
int n,m;
ll sum;
ll a[MAXN],b[MAXN];
int idx=1,idy=1;
int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=m;i++){
		cin>>b[i];
	}
	while(idx<=n&&idy<=m){
		if(sum+a[idx]<b[idy]) sum+=a[idx++];
		else sum=b[idy++];
	}
	while(idx<=n){
		sum+=a[idx++];
	}
	cout<<sum<<endl;
	return 0;
}

E

- 10pts:

可以发现所有 ai=ka_i=k 即可

-100pts:

si=a1+a2...+ais_i=a_1+a_2...+a_i

mi=max(a1,a2...ai)m_i=max(a_1,a_2...a_i)

则有:$b_i-b_{i-1}=s_i-m_i-(s_{i-1}-m_{i-1})=a_i-(m_i-m_{i-1})$

  • ai>mi1a_i>m_{i-1} 上式即为:bibi1=ai(aimi1)=mi1b_i-b_{i-1}=a_i-(a_i-m_{i-1})=m_{i-1}
  • aimi1a_i\le m_{i-1} 上式即为 bibi1=ai(mi1mi1)=aib_i-b_{i-1}=a_i-(m_{i-1}-m_{i-1})=a_i

可以发现第二种情况非常优秀,能直接计算出 aia_i 的值,但要有 aimi1a_i\le m_{i-1} 的要求,则先使用 bibi1=aib_i-b_{i-1}=a_i 构造出 AA,再将 a1a_1 置为全局最大值,这样就能保证所有的 aimi1=a1a_i\le m_{i-1}=a_1

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int T;
    T = 1;
    while (T--) {
        int n;
        cin >> n;
        vector<int> b(n);
        for (int i = 0; i < n; ++i) {
            cin >> b[i];
        }

        vector<int> a(n, 0);
        for (int i = 1; i < n; ++i) {
            a[i] = b[i] - b[i-1];
        }

        a[0] = *max_element(a.begin() + 1, a.end());

        for (int i = 0; i < n; ++i) {
            cout << a[i] << " ";
        }
        cout << endl;
    }
    return 0;
}

F

可以发现部分分的 aia_i 值域不大,提示可以进行枚举尝试 x,yx,y,再判断是否可行。

若有甲队 gcd()=xgcd(甲)=x,乙队 gcd()=ygcd(乙)=y,则对于每一对搭子:

  • xai  &&  ybix|a_i \;\&\&\;y|b_i,可行,ai,bia_i,b_i 分别加入甲队和乙队
  • yai  &&  xbiy|a_i \;\&\&\;x|b_i,可行,ai,bia_i,b_i 分别加入乙队和甲队
  • 其余情况表示不可行

当值域更大的时候,可行的 x,yx,y[1,1e9][1,1e9] 以内的因数,预处理后个数大约在 20002000

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i,n) for(int i=0; i<(n); i++)

ll GCD(ll a, ll b){ return b ? GCD(b,a%b) : a; }
ll LCM(ll a, ll b){ return a / GCD(a,b) * b; }
int N;
ll s[2];
vector<ll> A, B;
vector<ll> D[2];
ll solve(ll x, ll y)
{
    rep(i, N-1)
    {
        if (A[i] % x == 0 && B[i] % y == 0)
            continue;
        if (A[i] % y == 0 && B[i] % x == 0)
            continue;
        return 0;
    }
    return LCM(x, y);
}
int main()
{
    cin >> N;
    A.resize(N - 1);
    B.resize(N - 1);
    rep(t, 2) cin >> s[t];
    rep(i, N- 1) cin >> A[i] >> B[i];
    rep(t, 2) 
        for (ll d= 1; d*d <= s[t]; d++) 
            if (s[t] % d == 0)
            {
                D[t].push_back(d);
                if (d*d != s[t])
                    D[t].push_back(s[t] / d);
            }
    ll ans = 0;
    for (ll d0 : D[0])
        for (ll d1 : D[1])
            ans = max(ans, solve(d0, d1));
    cout << ans;
    return 0;
}

0 条评论

目前还没有评论...