ACGO欢乐赛#31 题解
2024-10-21 11:50:57
发布于:广东
这次比赛很很很很……(省略100000个)水,130左右个AK了呢!
T1:
这题没啥好说的,我用的是列举三个结果比大小的方法
#include <iostream>
using namespace std;
int main() {
    int a,b,c;
    cin>>a>>b>>c;
    int maxsum=max(a+b,max(a+c,b+c));//列举比大小
    cout<<maxsum<<endl;
    return 0;
}
T2:
这题我是输入完直接从小到大排序,然后用首项减去末项得到差的
#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,a[1000005];
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1);//sort排序
    cout<<a[n]-a[1];//首项减去末项得到差值
    return 0;
}
T3:
一个循环直接解决,a是最终答案的字符串
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    string s1,s2;
    cin>>s1>>s2;
    string a;
    for(int i=0;i<n;i++){
        a+=s1[i];//将s1的第i项添加到a
        a+=s2[i];//将s2的第i项添加到a
    }
    cout<<a;
    return 0;
}
T4:
这道题有一点难度了,看我代码注释就懂了
#include<bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin>>n;
    vector<int> a(n);
    for (int i=0;i<n;i++) cin>>a[i];
    int asum=0,bsum=0;
    while (!a.empty()) {//如果还有筹码
        auto it=max_element(a.begin(),a.end());//求最大值
        asum+=*it;//更新a筹码总值
        a.erase(it);//拿取完之后删除
        if (!a.empty()) {//如果还有筹码
            it=max_element(a.begin(),a.end());//求最大值
            bsum+=*it;//更新b筹码总值
            a.erase(it);//拿取完之后删除
        }
    }
    cout<<asum-bsum<<endl;//输出差
    return 0;
}
T5:
这个没啥好讲的,输入完s后反过来输出就行了
#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,m;
    cin>>n>>m;
    int s[n][m];
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++) cin>>s[i][j];
    }
    for(int i=0;i<m;i++) {//m,n调换位置
        for(int j=0;j<n;j++) cout<<s[j][i]<<" ";
        cout<<endl;
    }
    return 0;
}
T6:
这题输入完之后先排序,再选k个相邻元素循环,跟T2类似,比大小得到m
#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,k;
    cin>>n>>k;
    vector<int> a(n);
    for(int i=0;i<n;i++) cin>>a[i];
    sort(a.begin(),a.end());//sort排序
    int m=a[n-1];
    for(int i=0;i<=n-k;i++){
        int d=a[i+k-1]-a[i];//求差值
        if(d<m) m=d;//如果值是最小的就更新m
    }
    cout<<m<<endl;
    return 0;
}
全部评论 3
- T4: - #include<iostream> #include<algorithm> using namespace std; bool cmp(int a,int b){ return a>b; } int main(){ int arr[200000],n,a=0,b=0; cin>>n; for(int i=1;i<=n;i++){ cin>>arr[i]; } sort(arr+1,arr+n+1,cmp); for(int i=1;i<=n;i++){ if(i%2==1){ a+=arr[i]; } else{ b+=arr[i]; } } cout<<a-b; return 0; }- 2024-10-14 来自 上海 0- ? - 2024-10-14 来自 上海 0
- 谢谢 - 2024-10-14 来自 广东 0
- 用个sort()模拟一下就行了 - 2024-10-14 来自 云南 0
 
- 不得不说acgo欢乐赛越来越水 - 2024-10-13 来自 广东 0
- 顶 - 2024-10-13 来自 广东 0













有帮助,赞一个