第三届“传智杯”全国大学生IT技能大赛(初赛B组题解)

比赛连接

课程报名

在这里插入图片描述

思路

签到题:
直接模拟即可。

AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve() {
    int n, v, m, a;
    int cnt  = 0, ans = 0;
    scanf("%d%d%d%d", &n, &v, &m, &a);
    for (int i = 1; i <= n; ++i) {
        cnt++;
        ans += v;
        if (cnt == m) {
            v += a;
            cnt = 0;
        }
    }
    printf("%d\n", ans);
}
int main () {
    solve();
    return 0;
}

期末考试成绩

在这里插入图片描述

思路

还是模拟

AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve() {
    double x;
    scanf("%lf", &x);
    double ans = 0;
    if (x >= 90) {
        ans = 4.0;
    } else if (x >= 60 && x < 90) {
        ans = 4.0 - (90 - x) * 0.1;
    } else {
        int y = sqrt(x) * 10;
        x = y;
        if (x >= 60 && x < 90) {
            ans = 4.0 - (90 - x) * 0.1;
        } else {
            ans = 0.0;
        }
    }

    printf("%0.1f\n", ans);
}
int main () {
    solve();
    return 0;
}

志愿者

在这里插入图片描述

思路

简单排序,自定义排序规则。

AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 5e5 + 5;
struct Node {
   int t, k, ind;
}node[MAXN];
bool cmp(Node a, Node b) {
    if (a.k * a.t == b.k * b.t) {
        if (a.k == b.k) {
            return a.ind < b.ind;
        }
        else {
             return a.t > b.t;
        }

    }
    return a.k * a.t > b.k * b.t;
}
void solve() {
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
        scanf("%d%d", &node[i].t, &node[i].k);
        node[i].ind = i;
    }
    sort(node + 1, node + n + 1, cmp);
    for (int i = 1; i <= n; ++i) {
        if (i == n) {
            printf("%d\n", node[i].ind);
        } else {
            printf("%d ", node[i].ind);
        }

    }
}
int main () {
    solve();
    return 0;
}

终端

在这里插入图片描述

思路

利用两个map作映射关系,用时间去映射文件名,文件名去映射时间,一一对应。然后进行四个操作即可。

AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<string, int> gt;
map<int, string> gf;
void solve() {
    int n, cnt = 0;
    cin >> n;
    string f1, s1;
    while(n--) {
        cin >> f1;
        if (f1[0] != 'l') {
            cin >> s1;
            if (f1 == "touch") {
                if (!gt.count(s1)) {
                    gt[s1] = ++cnt;
                    gf[cnt] = s1;
                }
            } else if (f1 == "rename") {
                string yyy;
                cin >> yyy;
                if (gt.count(s1) && gt.count(yyy) == 0) {
                    int t = gt[s1];
                    gf[t] = yyy;
                    gt.erase(s1);
                    gt[yyy] = t;
                }
            } else if (f1 == "rm"){
                int t = gt[s1];
                gt.erase(s1);
                gf.erase(t);
            }
        } else {
            for (map<int,string>::iterator it = gf.begin(); it!=gf.end(); ++it) {
                cout << (it->second) << "\n";
            }
        }
    }
}
int main () {
    solve();
    return 0;
}

运气

在这里插入图片描述

思路

简单搜索,枚举n位中的每一位的情况,最大递归次数为610 ≈ 6e7,递归不会爆,而且不需要取模,最大情况也就610

AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = 1e9 + 7;
ll n, k, sum = 0;
void dfs(int cnt, ll num) {
    if (cnt == n) {
        if (num % k == 0) {
            sum++;
        }
        return;
    }
    for (int i = 1; i <= 6; ++i) {
        dfs(cnt + 1, num * 10 + i);
    }
}
void solve() {
    scanf("%lld%lld", &n, &k);
    dfs(0 , 0);
    printf("%lld\n", sum);
}
int main () {
    solve();
    return 0;
}

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空皓月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值