发布时间:2024-02-23 09:34:19 编辑:Lisa来源:未知
一起来看看本次月赛银牌试题解析代码+视频吧!
- X-NEW-
USACO 2024年2月银牌第一题
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
#define int long long
struct re{
int X1,X2,Y1,Y2;
};
re ve[N];
int mx,mn,gg;
vector<int> v1,v2;
bool check1(vector<pair<int,int> > S, int x){
vector<int> v;
if (gg==-1){
v=v2;
} else v=v1;
vector<int> q;
for (auto v:S){
q.push_back(floor((long double)1.0*(v.second-x)/v.first));
}
sort(q.begin(),q.end());
sort(v.begin(),v.end());
for (int i=0;i<v.size();i++)
if (v[i]>q[i]) return 0;
return 1;
}
bool check2(vector<pair<int,int> > S, int x){
vector<int> v;
if (gg==-1){
v=v2;
} else v=v1;
vector<int> q;
for (auto v:S){
q.push_back(ceil((long double)1.0*(v.second-x)/v.first));
}
sort(q.begin(),q.end());
sort(v.begin(),v.end());
for (int i=0;i<v.size();i++)
if (v[i]<q[i]) return 0;
return 1;
}
void solve(vector<pair<int,int> > S,int g){
gg=g;
int h=-4e18,t=4e18;
while (h<t){
int mid=(h+t+1)/2;
if (check1(S,mid)) h=mid;
else t=mid-1;
}
mn=min(mn,h);
h=-4e18,t=4e18;
while (h<t){
int mid=(h+t)/2;
if (mid<0) mid=(h+t-1)/2;
if (check2(S,mid)) t=mid;
else h=mid+1;
}
mx=max(mx,h);
}
signed main(){
ios::sync_with_stdio(false);
int T;
cin>>T;
while (T--){
int n,X1,Y1,Y2,X2;
cin>>n>>X1;
vector<pair<int,int> > S1,S2;
vector<int> jl;
for (int i=1;i<=n;i++){
cin>>Y1>>Y2>>X2;
jl.push_back(Y1); jl.push_back(Y2);
S1.push_back({X2,Y2});
S2.push_back({X2,Y1});
}
v1.clear(); v2.clear();
vector<int> ss;
for (int i=1;i<=4*n;i++){
int x;
cin>>x;
ss.push_back(abs(x));
if (x>0) v1.push_back(x);
else v2.push_back(x);
}
if (v1.size()<n||v2.size()<n){
cout<<-1<<endl;
continue;
}
int k=v1.size()-n;
sort(jl.begin(),jl.end());
reverse(jl.begin(),jl.end());
for (int i=0;i<k;i++)
S2.push_back({X1,jl[i]});
for (int i=k;i<jl.size();i++)
S1.push_back({X1,jl[i]});
mn=1e18;
mx=0;
sort(ss.begin(),ss.end());
// if (ss[0]==ss.back()){
// for (auto v:S1){
// mn=min(mn,-v.first*(-ss[0])+v.second);
// mx=max(mx,-v.first*(-ss[0])+v.second);
// }
// for (auto v:S2){
// mn=min(mn,-v.first*(ss[0])+v.second);
// mx=max(mx,-v.first*(ss[0])+v.second);
// }
// } else{
solve(S1,-1);
solve(S2,1);
// }
cout<<mx-mn<<endl;
}
return 0;
}
USACO 2024年2月银牌第二题
题解视频分析:
代码:
#include <bits/stdc++.h>
#define endl " "
using namespace std;
string s1,s2;
int main(){
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
int T;
cin>>T;
while (T--){
int n,m;
cin>>n>>m;
cin>>s1>>s2;
vector<pair<int,int> > ans;
vector<int> v1,v2;
int t3=0;
for (int i=0;i<n;i++)
if (i==0||s1[i]!=s1[i-1]) v1.push_back(s1[i]-'0');
for (int i=0;i<n;i++)
if (i==0||s2[i]!=s2[i-1]) v2.push_back(s2[i]-'0');
bool tt=0;
if (v2[0]==v1.back()){
tt=1;
swap(v1,v2);
}
if (v1.size()==1){
tt^=1;
swap(v1,v2);
}
// if (v1.size()<v2.size()) {
// tt=1;
// swap(v1,v2);
// }
int k=v2.back();
if (!(v1[0]==v2.back()||(v2.size()==1))){
k=3-k;
ans.push_back({2,3});
v2.pop_back();
}
reverse(v1.begin(),v1.end());
for (auto v:v1){
if (v==k){
ans.push_back({1,2});
} else{
ans.push_back({1,3});
t3++;
}
}
if (v2.size()==1){
if (ans.back().second==3) {
ans.pop_back(); t3--;
}
if (t3>0) ans.push_back({3,1});
} else{
if (ans.back().second==2){
ans.pop_back();
}
reverse(v2.begin(),v2.end());
for (auto v:v2)
if (v==k) {
ans.push_back({2,1});
} else{
ans.push_back({2,3});
}
if (ans.back().second==3){
ans.pop_back();
}
ans.push_back({3,2});
}
cout<<ans.size()<<endl;
if (m==1) continue;
for (auto &v:ans){
if (tt){
if (v.first<=2) v.first=3-v.first;
if (v.second<=2) v.second=3-v.second;
}
cout<<v.first<<" "<<v.second<<endl;
}
}
return 0;
}
/*
4
3 2
121
212
*/
USACO 2024年2月银牌第三题
题解视频分析:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6;
int f[N],g[N],h[N];
int n,m,k,a[N][6];
signed main(){
ios::sync_with_stdio(false);
int T;
cin>>T;
while (T--){
cin>>n>>m>>k;
for (int i=1;i<=m;i++)
for (int j=1;j<=k;j++)
cin>>a[i][j];
for (int i=1;i<=m;i++){
int ans=0;
int mn=1e9;
for (int j=1;j<=k;j++) mn=min(mn,a[i][j]);
for (int j=1;j<=k;j++)
ans+=a[i][j]%2;
if (ans==k||ans==0){
f[i]=mn;
} else {
int mx[2]={0,0};
for (int j=1;j<=k;j++)
mx[a[i][j]%2]=max(mx[a[i][j]%2],a[i][j]);
f[i]=-min(mx[0],mx[1]);
}
h[i]=f[i];
f[i]+=f[i-1];
}
g[m+1]=f[m];
for (int i=m;i>=1;i--){
g[i]=min(g[i+1],f[i]);
}
if (g[1]+n<=0){
cout<<-1<<endl;
continue;
}
vector<int> v;
for (int i=1;i<=m;i++){
int mx=0;
for (int j=1;j<=k;j++)
if (a[i][j]%2==1) mx=max(mx,a[i][j]);
mx=-mx;
if (mx==0) mx=h[i];
if (mx+n+min(0ll,g[i+1]-f[i])<=0) {
v.push_back(1);
n+=h[i];
} else{
v.push_back(0);
n+=mx;
}
}
for (int i=0;i<v.size();i++){
if (v[i]==0) cout<<"Even";
else cout<<"Odd";
if (i+1!=v.size()) cout<<" ";
}
cout<<endl;
}
return 0;
}
想要竞赛冲奖,除了实力非常强悍的同学来说,其他都是需要有充足准备的,起码要求是要上750分才是稳稳的。因为USACO竞赛的难度逐级越来越大,专业备考可以帮助选手节省时间的同时,更有机会冲击更高奖项!
在此次2023年比赛中,犀牛学子斩获了重磅奖项和高分战绩。恭喜以下32位犀牛优秀学子!
32位学员
满分晋级
(犀牛学子晋级喜报公示)
犀牛USACO竞赛培训班课,由犀牛金牌导师亲授,根据USACO考察方向及评分标准,提供详细科学参赛指导及学习指导帮助。
对于USACO的课程体系,经过不断的研究,以及对于⼏百名学⽣的学习能⼒分析,犀牛计算机教研团队最终总结出了⼀套lecture + lab的课程体系⽅案。即知识点授课+ 习题课教学体系,这是⽬前很多美国主流⼤学都在⽤的教育体系,我们经过改良优 化这种体系来⾼效备战USACO考试。
精品小班、一对一等多种班型可供选择,线下+线上同步授课,上海、北京、南京、苏州、无锡、深圳、重庆等地都设有校区,详细课程内容可咨询网站客服了解~
AP03-08
小托福04-03
美国留学04-05
微信咨询