2024年睿抗机器人开发者CAIP-编程技能赛-本科组省赛题解


在这里插入图片描述
已全部拿下,后天考试,做一套找找感觉,ioi赛制就是爽

RC-u1 热 热 热

n数据范围很小,模拟一下就可以

#include <bits/stdc++.h>
#define LL long long
using namespace std;

typedef pair<int,int> PII;

void solve(){
    int n,w;
    cin>>n>>w;
    w--;
    int ans1=0,ans2=0;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        if(x>=35){
            if(w==3){
                ans2++;
            }else{
                ans1++;
            }
        }
        w=(w+1)%7;
    }
    cout<<ans1<<' '<<ans2<<'\n';
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T=1;
    while(T--) solve();
}

谁进线下了?

暴力判断,也不需要排序

#include <bits/stdc++.h>
#define LL long long
using namespace std;

typedef pair<int,int> PII;
int s[10]={0,12,9,7,5,4,3,2,1,0};

void solve(){
    int n;
    cin>>n;
    vector<int> ans(21);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=20;j++){
            int p,k;cin>>p>>k;
            if(p==1) ans[j]+=12;
            if(p==2) ans[j]+=9;
            if(p==3) ans[j]+=7;
            if(p==4) ans[j]+=5;
            if(p==5) ans[j]+=4;
            if(p>=6 && p<=7) ans[j]+=3;
            if(p>=8 && p<=10) ans[j]+=2;
            if(p>=11 && p<=15) ans[j]+=1;
            ans[j]+=k;
        }
    }
    for(int i=1;i<=20;i++){
        cout<<i<<' '<<ans[i]<<'\n';
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T=1;
    while(T--) solve();
}

暖炉与水豚

当一个水豚是暖的但是周围33方格都没有暖炉,那么它的周围33方格为’.'的都是有可能是暖炉
要注意如果这个位置是暖炉,那么它的周围3*3就不能有冷的水豚,这点需要判断

#include<bits/stdc++.h>
#define LL long long
using namespace std;

typedef pair<int,int> PII;
void solve() {
    int n,m;
    cin>>n>>m;
    vector<vector<char>> a(n+1,vector<char>(m+1));
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            cin>>a[i][j];
        }
    }
    auto check=[&](int x,int y)->bool{
        for(int i=max(x-1,1); i<=min(x+1,n); i++) {
            for(int j=max(y-1,1); j<=min(y+1,m); j++) {
                if(a[i][j]=='m') return false;
            }
        }
        return true;
    };
    auto check2=[&](int x,int y)->bool{
        for(int i=max(x-1,1); i<=min(x+1,n); i++) {
            for(int j=max(y-1,1); j<=min(y+1,m); j++) {
                if(a[i][j]=='c') return false;
            }
        }
        return true;
    };
    set<PII> ans;
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            if(a[i][j]=='w') {
                if(check(i,j)) {
                    for(int p=max(i-1,1); p<=min(i+1,n); p++) {
                        for(int q=max(j-1,1); q<=min(j+1,m); q++) {
                            if(a[p][q]=='.' && check2(p,q)) ans.insert({p,q});
                        }
                    }
                }
            }
        }
    }
    if(ans.empty()){
        cout<<"Too cold!"<<'\n';
        return ;
    }
    for(auto [x,y]:ans) {
        cout<<x<<' '<<y<<'\n';
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T=1;
//    cin>>T;
    while(T--) {
        solve();
    }
    return 0;
}

章鱼图的判断

并查集判断环,bfs求两点最短距离

#include<bits/stdc++.h>
#define LL long long
using namespace std;

typedef pair<int,int> PII;
const int N=1e5+10;
int n,m;
vector<int> g[N];
int ans,vis[N],p[N],cnt[N],dis[N];
int l,r;
int find(int x){
    if(x!=p[x]) p[x]=find(p[x]);
    return p[x];
}
int bfs(int x,int y){
    queue<int> q;
    q.push(x);
    vis[x]=1;
    while(!q.empty()){
        auto u=q.front();
        q.pop();
        if(u==y) break;
        for(auto v:g[u]){
            if(u==x && v==y) continue;
            if(!vis[v]){
                vis[v]=1;
                q.push(v);
                dis[v]=dis[u]+1;
            }
        }
    }
    return dis[y]+1;
}
void solve(){
    cin>>n>>m;
    ans=0;
    for(int i=1;i<=n;i++){
        vis[i]=cnt[i]=dis[i]=0;
        g[i].clear();
        p[i]=i;
    }
    l=r=-1;
    for(int i=1;i<=m;i++){
        int x,y;
        cin>>x>>y;
        g[x].push_back(y);
        g[y].push_back(x);
        int px=find(x);
        int py=find(y);
        if(px==py){
            cnt[py]++;
            l=x,r=y;
        }else{
            p[px]=py;
            cnt[py]+=cnt[px];
        }
    }
    for(int i=1;i<=n;i++){
        if(find(i)==i && cnt[i]==1) ans++;
    }
    if(ans==1){
        cout<<"Yes"<<' '<<bfs(l,r)<<'\n';
    }else{
        cout<<"No"<<' '<<ans<<'\n';
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T=1;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}

工作安排

01背包优化

#include<bits/stdc++.h>
#define LL long long
using namespace std;

typedef pair<int,int> PII;
const int N=5010;
int dp[N],n;
struct node{
    int t,d,p;
    bool operator<(const node&it)const{
        return d<it.d;
    }
}a[N];
void solve(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i].t>>a[i].d>>a[i].p;
    sort(a+1,a+n+1);
    for(int i=0;i<=5000;i++) dp[i]=0;
    for(int i=1;i<=n;i++){
        auto [t,d,p]=a[i];
        for(int j=d;j>=0;j--){
            if(j>=t) dp[j]=max(dp[j],dp[j-t]+p);
        }
    }
    int ans=0;
    for(int j=0;j<=5000;j++) ans=max(ans,dp[j]);

    cout<<ans<<'\n';
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T=1;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}

### 如何准备编程道比 参加RoboCom机器人开发者中的CAIP编程设计道——“编程技能”,需要充分理解事的要求并制定合理的学习计划。以下是关于如何准备该比的具体建议: #### 明确竞目标与规则 参者应详细了解比的目标、评分标准以及技术要求[^1]。这有助于针对性地提升自己的能力,确保作品能够满足评审的标准。 #### 掌握基础编程知识 对于初学者而言,掌握至少一种主流编程语言是非常重要的,比如Python或C++。这些语言因其强大的功能和广泛的社区支持,在各类算法实现中占据重要地位。推荐通过在线课程或者书籍来夯实基础知识。 #### 提升算法与数据结构水平 优秀的程序离不开高效的算法设计。因此,深入研究经典的数据结构(如数、链表、栈队列等)及其操作方法;熟悉常见排序查找算法(快速排序、二分法)、动态规划等问题解决策略显得尤为重要。 #### 实践项目积累经验 理论联系实际是最好的学习方式之一。可以通过参与开源项目贡献代码、完成小型个人工程项目等方式增加实战经历。这样不仅锻炼了自己的编码技巧,还能培养解决问题的能力。 #### 关注往届优秀案例分析 查看历来获奖选手的作品展示视频或文档资料,从中汲取灵感,并总结他们的成功之处应用到自己身上。 ```python def example_algorithm(input_list): """ A simple sorting algorithm as an illustration. Args: input_list (list): The list to be sorted. Returns: list: Sorted version of the input list. """ n = len(input_list) for i in range(n): already_sorted = True # Compare each item with its neighbor and swap them if necessary for j in range(n - i - 1): if input_list[j] > input_list[j + 1]: temp = input_list[j] input_list[j] = input_list[j + 1] input_list[j + 1] = temp already_sorted = False if already_sorted: break return input_list ``` 上述示例展示了基本的冒泡排序逻辑,虽然不是最优解法,但对于新手来说是一个很好的起点用于理解和实践简单的算法概念。 #### 加强团队协作沟通能力 如果是以小形式参,则成员间良好的配合至关重要。定期召开会议讨论进展状况,合理分配任务给每位队员发挥各自特长也是取得好成绩的关键因素之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值