前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >河工院首届工业设计大赛程序组(选拔赛)题解

河工院首届工业设计大赛程序组(选拔赛)题解

作者头像
浪漫主义狗
发布2024-04-28 09:27:02
980
发布2024-04-28 09:27:02
举报
文章被收录于专栏:HAUE_LYS'Blog

不存在的数

  • 签到题,模拟
  • 对输入的数进行标记,从 1 遍历到 N,输出没有被标记的数字即可

std标程:

代码语言:javascript
复制
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <sstream>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>

using namespace std;

#define IOS ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
#define re register
#define fi first
#define se second
#define endl '\n'

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;

const int N = 1e6 + 3;
const int INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-6, PI = acos(-1);

int a[N];

void solve(){

    int n, m; cin >> n >> m;
    for (int i = 0; i < m; i ++) {
        int x; cin >> x; a[x] = 1;
    }
    for (int i = 1; i <= n; i ++) {
        if (a[i] == 0) cout << i << ' ';
    }
}

int main(){

    IOS;

    int _ = 1;

    // cin >> _;

    while(_ --){
        solve();
    }

    return 0;

}

一血代码:

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n, m;
    cin >> n >> m;

    map<int, int>mp;

    for( int i = 1 ; i <= m ; i++ ) {
        int x;
        cin >> x;
        mp[x]++;
    }

    for( int i = 1 ; i <= n ; i++ ) {
        if( mp[i] ) continue;
        else cout << i << ' ';
    }
} 

疯狂校园跑

配速为1km所用时间,所以配速为时间除以路程;

知道这一点之后就可以写代码了。

std标程:

代码语言:javascript
复制
#include <stdio.h>

int main()
{
    int t; scanf("%d", &t);
    while (t --)
    {
        int s, t; scanf("%d %d", &s, &t);
        double sps = t * 1.0 / s; //多少秒每米
        double spm = sps * 1000; //多少秒每公里 
        printf("%d:%02d:%03d\n", (int)(spm / 60), (int)(spm - (int)(spm / 60) * 60), ((int)(spm * 1000) % 1000));
    }
    return 0;
}

一血代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'

using namespace std;

void solve(){
    int n, s;
    cin >> n >> s;
    double res = 1.0 * 1000 * s / n;
    int h = res / 60;
    int m = res - h * 60;
    int ms = 1.0 * (res - h * 60 - m) * 1000;
    printf("%d:%02d:%03d\n", h, m, ms); 
}

signed main(){
    IOS;
    int t = 1;
    cin >> t;
    while(t --) solve();
    return 0;
}

输出语句

  • 模拟
  • 考察转义字符,这里只考察了大家单引号 \',双引号 \",回车符 \n以及反斜杠 \\,对输出加以判定即可

std标程:

代码语言:javascript
复制
#include <bits/stdc++.h>

using namespace std;

void solve()
{
    string s;
    getline(cin, s);

    int l = 8, r = s.size() - 4;
    for (int i = l; i <= r; i ++)
    {
        if (i != r && s[i] == '\\')
        {
            if (s[i + 1] == '\'')
            {
                cout << '\'';
                i ++;
            }
            else if (s[i + 1] == '\"')
            {
                cout << '\"';
                i ++;
            }
            else if (s[i + 1] == '\\')
            {
                cout << '\\';
                i ++;
            }
            else if (s[i + 1] == 'n')
            {
                cout << '\n';
                i ++;
            }
        }
        else
        {
            cout << s[i];
        }
    }
}

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

一血代码:

代码语言:javascript
复制
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
    string a;
    getline(cin,a);
    int flag=0;
    for(int i=0;i<a.size();i++)
    {
        if(a[i-1]=='f'&&a[i]=='('&&a[i+1]=='"')
        {
            for(int j=i+2;j<a.size();j++)
            {
                if(a[j]=='"'&&a[j+1]==')'&&a[j+2]==';')
                {
                    break;
                }
                if(a[j]=='\\')
                {
                    j++;
                    if(a[j]=='0')
                    {
                        cout<<" ";
                    }
                    else if(a[j]=='n')
                    {
                        cout<<endl;
                    }
                    else
                    {
                        cout<<a[j];
                    }
                }
                else cout<<a[j];
            }
        }
    }
    return 0;
}

疯狂汽车运输队

本题为简单的01背包,不过是需要算一下超重多少,但是最多超重100%,那么代码就如下。

std标程:

代码语言:javascript
复制
#include<bits/stdc++.h>

using namespace std;
int f[10000];
int main()
{  
    int T;
    cin>>T;
    while(T--)
    {
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=m*2;i++) f[i]=0;
        for(int i=1;i<=n;i++)
        {
            int x,y;
            cin>>x>>y;
            for(int j=m*2;j>=x;j--) f[j]=max(f[j],f[j-x]+y);
        }
        int ans=0;
        for(int i=m;i<=2*m;i++)
        {
            int x=(i-m)*1.0/(m*1.0)*10;
            // cout<<x<<" "<<f[i]<<" ";
            x=f[i]-(int)(f[i]*x*0.1);
            ans=max(x,ans);
            // cout<<x<<"\n";
        }
        cout<<ans<<"\n";
     } 
    return 0;
} 

为什么演奏春日影

  • 签到题,trick
  • 选择 k = 1,则后面每次都开摆,任何正整数取模结果都是 0,因此结果全为 Yes

std标程:

代码语言:javascript
复制
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n, m; cin >> n >> m;
    for (int i = 0; i < n; i ++) {
        int x; cin >> x;
    }
    cout << "Yes";
    return 0;
} 

一血代码:

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;

map<int, int>mp;

void calc( int x ) 
{
    for( int i = 2 ; i <= sqrt(x) ; i++ ) {
        if( x % i == 0 ) {
            mp[i]++;
            mp[x % i]++;
        }
    }
}
int main()
{
    int n, m;
    cin >> n >> m;

    vector<int> a(n);

    for( int i = 0 ; i < n ; i++ ) {
        cin >> a[i];
    }

    for( int i = 0 ; i < n ; i++ ) {
        calc(a[i]);
    }

    int mx = 0;
    for( auto i : mp ) {
        mx = max(mx, i.second);
    }

    if( mx + m < n ) cout << "No";
    else cout << "Yes";
} 

BinGo游戏

  • 签到题,模拟
  • 根据题意模拟循环判断即可

std标程:

代码语言:javascript
复制
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <sstream>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>

using namespace std;

#define IOS ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
#define re register
#define fi first
#define se second
#define endl '\n'

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;

const int N = 1e6 + 3;
const int INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-6, PI = acos(-1);

int a[10][10];

bool check1() {
    for (int i = 0; i < 5; i ++) {
        bool flag = 1;
        for (int j = 0; j < 5; j ++) {
            if (a[i][j] % 2 != 0) {
                flag = 0; break;
            }
        }
        if (flag) return 1;
    }
    return 0;
}

bool check2() {
    for (int i = 0; i < 5; i ++) {
        bool flag = 1;
        for (int j = 0; j < 5; j ++) {
            if (a[j][i] % 2 == 0) {
                flag = 0; break;
            }
        }
        if (flag) return 1;
    }
    return 0;
}

bool check3() {
    bool mainDiag = a[0][0] % 2 == 0;
    bool offDiag = a[0][4] % 2 == 0;
    for (int i = 1; i < 5; i++) {
        if ((a[i][i] % 2 == 0) == mainDiag || (a[i][4-i] % 2 == 0) == offDiag) return false;
        mainDiag = !mainDiag;
        offDiag = !offDiag;
    }
    return true;
}

void solve(){
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) cin >> a[i][j];
    }

    if (check1() || check2() || check3()) {
        cout << "BINGO" << endl;
    } else {
        cout << "OHNO" << endl;
    }
}

int main(){

    IOS;

    int _ = 1;

    // cin >> _;

    while(_ --){
        solve();
    }

    return 0;

}

一血代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'

using namespace std;

int a[10][10];
bool ok;

bool check(int x){
    int f = 0;
    for(int i = 0; i < 5; i ++){
        if(a[i][x] % 2 != 1) break;
        if(i == 4) f = 1;
    }
    for(int i = 0; i < 5; i ++){
        if(a[x][i] % 2 != 0) break;
        if(i == 4) f = 1;
    }
    if(f) return true;
    return false;
}

void solve(){
    for(int i = 0; i < 5; i ++)
        for(int j = 0; j < 5; j ++)
            cin >> a[i][j];

    for(int i = 0; i < 5; i ++){
        if(check(i)){
            ok = true;
//          cout << i << endl;
        }
    }
//  if(ok) cout << 1 << endl;
    bool ok1 = false, ok2 = false;
    for(int i = 1; i < 5; i ++){
        if(a[i][i] % 2 == a[i - 1][i - 1] % 2){
            break;
        }
        if(i == 4) ok1 = true;
    }
    for(int i = 1; i < 5; i ++){
        if(a[i][4 - i] % 2 == a[i - 1][5 - i] % 2){
            break;
        }
        if(i == 4) ok2 = true;
    }
    if(ok1 && ok2) ok = true;
    if(ok) cout << "BINGO" << endl;
    else cout << "OHNO" << endl;
}

signed main(){
    IOS;
    int t = 1;
//  cin >> t;
    while(t --) solve();
    return 0;
}

下载序列

  • 思维,小根堆
  • 每个文件总共需要的时间(包含下载和文件验证)可以预处理出来,那么我们可以维护一个容量为 m 的队列,每次让当前队列里时间最小的文件出列,并将时间累加到新的入队时间上,那么最终最后一个出队的文件将是时间最大的,记为 tmax,将 tmax * 维护费k 输出即可。

std标程:

代码语言:javascript
复制
#include <bits/stdc++.h>

using namespace std;
typedef long long LL;
const int N = 1e5 + 10;

int x, m, k, n, e[N];
priority_queue<LL, vector<LL>, greater<LL>> q;

int main() {
    cin >> x >> m >> k;
    cin >> n;
    for (int i = 1; i <= n; i ++)
    {
        int a, t;
        cin >> a >> t;
        e[i] = (a + x - 1) / x + t;
    }
    for (int i = 1; i <= m; i ++)
    {
        q.push(e[i]);
    }
    LL ans = 0;
    for (int i = m + 1; i <= n; i ++)
    {
        ans = q.top(); q.pop();
        q.push(e[i] + ans);
    }
    while (q.size())
    {
        ans = q.top(); q.pop();
    }
    cout << ans * k;
    return 0;
}

会 赢 的

我们只需要以下操作即可:

  1. 选取数组中的 100(至多一个)
  2. 选取 1 ~ 9 之间的一个数
  3. 选取 10 ~ 90 之间能被10整除的数
  4. 如果 2、3 操作选不出任何一个数,那么可以在剩下的数里选任意一个(没有则不选)

std标程:

代码语言:javascript
复制
#include <stdio.h>

int n, a[1010];

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i ++)
        scanf("%d", &a[i]);

    for (int i = 1; i < n; i ++)
        for (int j = i + 1; j <= n; j ++)
            if (a[i] > a[j])
            {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }

    int ans = 0, p[5] = {0};
    for (int i = 1; i <= n; i ++)
    {
        if (p[1] == 0 && a[i] >= 1 && a[i] <= 9)
            p[1] ++, ans ++;
        else if (p[2] == 0 && a[i] >= 10 && a[i] <= 99 && a[i] % 10 == 0)
            p[2] ++, ans ++;
        else if (p[3] == 0 && a[i] == 100)
            p[3] ++, ans ++;
        else
            p[0] ++;
    }
    if (p[1] == 0 && p[2] == 0 && p[0] > 0) ans ++;

    printf("%d", ans);

    return 0;
}

一血代码:

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=110;
int a[5];
int n,res=0,cnt=0;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        if(x==0)a[0]++;
        else if(x==100)a[1]=1;
        else if(x>0&&x<10)a[2]++;
        else a[3]++;
        if(x%10==0)cnt++;
    }
    if(a[0])res+=a[0];
    if(a[1])res++;
    if(a[2]&&a[3]){
        if(cnt)res+=2;
        else res+=1;
    }else if(a[2]||a[3])res+=1;

    cout<<res<<endl;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-4-27 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 不存在的数
    • std标程:
      • 一血代码:
      • 疯狂校园跑
        • std标程:
          • 一血代码:
          • 输出语句
            • std标程:
              • 一血代码:
              • 疯狂汽车运输队
                • std标程:
                • 为什么演奏春日影
                  • std标程:
                    • 一血代码:
                    • BinGo游戏
                      • std标程:
                        • 一血代码:
                        • 下载序列
                          • std标程:
                          • 会 赢 的
                            • std标程:
                              • 一血代码:
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档