2024.3.14|2024华水天梯选拔赛
L1-1 最好的文档
L1-2 什么是机器学习
L1-3 程序员买包子
L1-4 进化论
L1-5 猜帽子游戏
L1-6 剪切粘贴
L1-7 分寝室
L1-8 谁管谁叫爹
L2-1 堆宝塔
L2-2 天梯赛的赛场安排
L2-3 锦标赛
L2-4 寻宝图
心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。
L1-1 最好的文档
实践代码
void solve(){
cout<<"Good code is its own best documentation.";
}
L1-2 什么是机器学习
实践代码
void solve(){
int a,b;cin>>a>>b;
cout<<a+b-16<<endl;
cout<<a+b-3<<endl;
cout<<a+b-1<<endl;
cout<<a+b;
}
}
L1-3 程序员买包子
实践代码
void solve(){
string x;
int n,m,k;cin>>n>>x>>m>>k;
if(k==n) cout<<"mei you mai"<<' '<<x<<' '<<"de";
if(k==m) cout<<"kan dao le mai"<<' '<<x<<' '<<"de";
else if(k>m&&k>n)cout<<"wang le zhao mai"<<' '<<x<<' '<<"de";
}
L1-4 进化论
实践代码
void solve(){
string x;
int n,m,k;cin>>n>>x>>m>>k;
if(k==n) cout<<"mei you mai"<<' '<<x<<' '<<"de";
if(k==m) cout<<"kan dao le mai"<<' '<<x<<' '<<"de";
else if(k>m&&k>n)cout<<"wang le zhao mai"<<' '<<x<<' '<<"de";
}
L1-5 猜帽子游戏
实践代码
void solve(){
int n;cin>>n;
vector<int> a(n),b(n);
for(int i=1;i<=n;i++) cin>>a[i];
int k;cin>>k;
while(k--){
int cnt=0,ans=0;
for(int i=1;i<=n;i++){
cin>>b[i];
if(b[i]==0) cnt++;//记录弃权的人数
}
if(cnt==n) cout<<"Ai Ya"<<endl;//所有人都不猜
else if(cnt<n){
for(int i=1;i<=n;i++){
if(b[i]==a[i]) ans++;//记录猜对的人数
}
if(ans==n-cnt) cout<<"Da Jiang!!!"<<endl;//所有人都不错/至少有一个人猜对了(当cnt=n-1时)
if(ans>1&&ans<n-cnt) cout<<"Ai Ya"<<endl;//只要有一个人猜错
if(ans==0) cout<<"Ai Ya"<<endl;//所有人都猜错
//注:当同时有1个人错了且有一个人对了(ans==1)的特殊情况,此时输出为空
}
}
}
L1-6 剪切粘贴
实践代码
void solve(){
string s;cin>>s;
int n;cin>>n;
while(n--){
int a,b;cin>>a>>b;
string s1,s2;cin>>s1>>s2;
string c = s.substr(a-1,b-a+1);//剪切
string d = s1+s2;//找到插入位置的原字符串
s.erase(a-1,b-a+1);
int pos=s.find(d);
if(pos!=-1) s.insert(pos+s1.length(),c);
else s+=c;
}
cout<<s<<endl;
}
L1-7 分寝室
实践代码
void solve(){
int n0,n1,n;cin>>n0>>n1>>n;
int a=-1,b=-1,mn=10101010;
for(int i=1;i<=n-1;i++){
int j=n-i;
if(n0%i==0&&n1%j==0){
int x=n0/i,y=n1/j,ans=abs(x-y);//男生寝室数、女生寝室数、每间寝室人数差
if(mn>ans) a=i,b=j,mn=ans;
}
}
L1-8 谁管谁叫爹
实践代码
void solve(){
int n;cin>>n;
while(n--){
int a,b;cin>>a>>b;
int sum1=0,sum2=0;
int c=a,d=b;
while(a){
sum1+=(a%10);
a/=10;
}
while(b){
sum2+=(b%10);
b/=10;
}
if(c%sum2==0&&d%sum1!=0) {cout<<"A"<<endl;}
else if(c%sum2!=0&&d%sum1==0) {cout<<"B"<<endl;}
else if(c%sum2==0&&d%sum1==0||c%sum2!=0&&d%sum1!=0){
if(c<d) {cout<<"B"<<endl;}
else {cout<<"A"<<endl;}
}
}
}
L2-1 堆宝塔
实践代码
void solve(){
int n;cin>>n;
stack<int> a,b;
int cnt=0,mx=0;
while(n--){
int c;cin>>c;
if(a.empty()||c<a.top()) a.push(c);
else if(b.empty()||c>b.top()) b.push(c);
else{
mx=max(mx,(int)a.size());
while(!a.empty()) a.pop();
cnt++;
while(!b.empty()&&b.top()>c) {a.push(b.top());b.pop();}
a.push(c);
}
}
if(a.size()) cnt++;
if(b.size()) cnt++;
cout<<cnt<<' '<<mx;
}
L2-2 天梯赛的赛场安排
实践代码
void solve(){
int n,c;cin>>n>>c;
int ans=0;
priority_queue<int> q;
for(int i=0;i<n;i++){
string s;int x;
cin>>s>>x;
cout<<s<<' '<<(x+c-1)/c<<endl;
ans+=x/c;
if(x%c) q.push(x%c);//待处理的剩下的人
}
vector<int> g;//赛场
while(!q.empty()){
int t=q.top();q.pop();
bool ok=false;
for(int i=0;i<g.size();i++) {
if (t <= c - g[i]) {ok = true;g[i] += t;break;}//赛场还能装下大于t的人
}
if(!ok) {g.push_back(t);ans++;}//再开一个赛场
}
cout<<ans;
}
## L2-3 锦标赛
实践代码
L2-2 L2-4 寻宝图
实践代码
心有猛虎,细嗅蔷薇。再见了朋友~