USACO 2026 Jan1 Bronze

The bronze division had 10377 total participants, of whom 7770 were pre-college students. All competitors who scored 700 or higher on this contest are automatically promoted to the silver division.

Your score on this contest was 722. Each problem contributed 1000/3 possible points, with equal points assigned to each non-sample test case; you can recall your performance on each test case by clicking on a problem below and looking at your results in analysis mode.

我的得分:\(AC+WA(2/12)+AC=722 \operatorname{pts}\),居然可以晋级?

为什么感觉这场比赛 C<A<<<<<B 呢?本来估计可以 AK 然后直接飞升 Silver 的,结果被 B 神秘 Ad-hoc 创飞了 /fn

A Chip Exchange

洛谷文章

以下记“B->A”为把 B 换成 A。

题目要求的是 A,你首先想着 B->A 能不能多增加。首先显然是把能换的都换了。

然后既然收到的芯片是随机的,所以肯定是运气最坏的情况,直观理解就是,你收到的芯片换成目标芯片 A 是最不值的那一种。所以就要分类讨论:

  1. 如果 B 换成 A 不亏不赚(\(c_A=c_B\)),那么最坏情况就是先给你一大堆 B,恰好可以全部换成 A;等到 A 差一次交换的就达到 \(f_A\) 的时候,把 A 补到 \(f_A-1\),剩下这一个 A 肯定就是给你 \(c_B\) 个 B,让你用 \(c_B\) 个 B 换成 \(c_A\) 个 A。
  2. 如果 B 换成 A 会亏(\(c_B>c_A\)),那么最坏情况就应该是给芯片 B 要多一点,先给一大堆 B,用这些 B 恰好完全换成 A;等到 A 差一次交换的就达到 \(f_A\) 的时候,就把 A 补到 \(f_A-1\),剩下这一个 A 同理情况 1,给你 \(c_B\) 个 B,让你用 \(c_B\) 个 B 换成 \(c_A\) 个 A。
  3. 如果 B 换成 A 会赚(\(c_B<c_A\)),那最坏情况:一直给 A 到达到 \(f_A\) 之前 \(1\) 个,然后给 B 补充到 \(c_B\) 个,用这 \(c_B\) 个 B 去换 \(c_A\) 个 A。

难点在于就是分类讨论,剩下的式子应该很好推,简单模拟即可。难度黄左右。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
constexpr int N=-1;
ll a,b,ca,cb,f;
ll cnt=0;  //交换次数
inline void changeall()
{
    cnt=(b/cb); b-=cnt*cb,a+=cnt*ca;
}
inline ll solve()
{
    cin>>a>>b>>ca>>cb>>f;
    ll ans=0;
    changeall();
    if(a>=f) return 0;
    cerr<<a<<' '<<b<<endl;
    if(ca==cb)
    {
        cnt=(f-a)/ca; if((f-a)%ca==0) cnt--;
        ans+=cnt*cb-b; b+=cnt*cb-b;
        changeall();
        // cerr<<cnt<<' '<<a<<' '<<b<<endl;
        ans+=(f-a-1);
        ans+=cb;
    }
    else if(cb>ca)
    {
        cnt=(f-a)/ca; if((f-a)%ca==0) cnt--;
        ans+=cnt*cb-b; b+=cnt*cb-b;
        changeall();
        ans+=(f-a-1);
        ans+=cb;
    }
    else
    {
        ans+=(f-a-1);
        ans+=cb-b;
    }
    return ans;
}
int main()
{
    // freopen("neuvillette.in","r",stdin);
    // freopen("neuvillette.out","w",stdout);
    cin.tie(0)->sync_with_stdio(0);
    int T;
    cin>>T;
    while(T--) cout<<solve()<<'\n';
    return 0;
}
/*
- 标题 『Problem 1. Chip Exchange』 
- 链接 『https://usaco.org/index.php?page=viewproblem&cpid=1527&lang=en』
- 时限 『4000 ms』
- 用时 『h 40min』
- 思路:
题目要求的是A,看看cb B->ca A能不能多增加

先把能换的都换了,更新a,b

假如B换成A不亏不赚,那最坏情况应该就是先给你一大堆B可以全部换成A,等到A差一点点的时候又给你一大堆B
aA bB cB->cA fA
然后补B,补充到floor((f-a)/c)*c,全部变成A,更新a,b=0
然后给A:(f-a-1)
然后给B:c,换成A

假如B换成A会亏(cb>ca),那最坏情况应该就是给一大堆B,然后用这些B换成A,换到再换一次A就达标了为止
B恰好完全反应,给A,更新a,b=0
然后给A补到达标-1,给Bcb个

假如B换成A会赚(cb<ca),那最坏情况:一直给A到达标之前1个,然后给B (cb-b) 个,用B去换A
*/

C Photoshoot

这个题洛谷更新的时候我在 tm 玩原神去了,题解没交上去 /fn

全场比赛最弱智的一个题,但是我还是成功给这个题评上了黄:https://www.luogu.com.cn/ticket/RLVG320147

显然直接暴力,然后没了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
constexpr int N=507;
ll val[N][N];
ll sum[N][N];
ll ans=0;
int n,k,q;
int r,c,v;
inline ll solve()
{
    cin>>r>>c>>v;
    ll delta=v-val[r][c];
    val[r][c]=v;
    for(int i=max(1,r-k+1);i<=r;i++)
        for(int j=max(1,c-k+1);j<=c;j++)
        {
            sum[i][j]+=delta;
            ans=max(ans,sum[i][j]);
        }
    return ans;
}
int main()
{
    // freopen("neuvillette.in","r",stdin);
    // freopen("neuvillette.out","w",stdout);
    cin>>n>>k>>q;
    while(q--) cout<<solve()<<'\n';
    return 0;
}
/*
- 标题 『Problem 3. Photoshoot』 
- 链接 『https://usaco.org/index.php?page=viewproblem&cpid=1529』
- 时限 『4000 ms』
- 用时 『h 11min』
- 思路:
可以维护某一点为一个K*K正方形的左上角那个点,
但是每次操作会引起k^2=625个点更新
然后再拿这些点和之前的最大值对比
单次操作复杂度也就625
*/
posted @ 2026-01-19 09:59  wwwidk1234  阅读(1)  评论(0)    收藏  举报