• 2021年度训练联盟热身训练赛第一场(牛客) 解题/补题报告


    https://ac.nowcoder.com/acm/contest/12606

    D

    你的朋友偷偷地选了N个连续的正数,从1到100的整数,让你猜它们的和是多少(偶数或奇数或不能确定)

    思路:因数据范围<10,故我选择打表

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    int main()
    {
        int n;
        cin>>n;
        if(n==1){
        cout<<"Either"<<endl;
        }else if(n==2){        
        cout<<"Odd"<<endl;
        }else if(n==3){        
        cout<<"Either"<<endl;
        }else if(n==4){        
        cout<<"Even"<<endl;
        }else if(n==5){        
        cout<<"Either"<<endl;
        }else if(n==6){        
        cout<<"Odd"<<endl;
        }else if(n==7){        
        cout<<"Either"<<endl;
        }else if(n==8){        
        cout<<"Even"<<endl;
        }else if(n==9){        
        cout<<"Either"<<endl;
        }else if(n==10){        
        cout<<"Odd"<<endl;
        }
        
        return 0;
    }

    F

    圣诞老人需要把每次旅行的动物分成两组,这样一组中所有动物的重量总和等于另一组中所有动物的重量总和。为了让这个过程更有效率,圣诞老人正在寻求一个整数目标体重t,这样,所有比t轻的动物归为一组,比t重的动物归为另一组。如果有多个这样的t,他想要最小的那个。有一个小问题:如果有些动物的重量正好等于t,我们该怎么办?圣诞老人是这样解决这个问题的:如果这类动物的数量是偶数,他就把它们平均分配给两组(这样就把重量平均分配了)。但是如果这类动物的数量是奇数,那么其中的一只动物就被派去和精灵们一起制作玩具(它不属于任何一组),剩下的动物(现在是偶数)平均分配给两组。

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<map>
    using namespace std;
    #define MAXN 100010
    typedef long long ll;
    ll a[MAXN],sum[MAXN];  
    int main(){
        int m;
        cin>>m;
        int ans=0;
        for(int i=0;i<m;i++){
            cin>>a[i];
        }
        sort(a,a+m);
        for(int i=0;i<m;i++){
            sum[i]=sum[i-1]+a[i];
        }
        int t;
        for(int i=0;i<m;i++){
            if(sum[i]==sum[m-1]-sum[i]){
                t=a[i];
                if(a[i]==a[i+1]){
                    t=a[i];
                }else{
                    t++;
                }
                break;
            }
            if(sum[i]==sum[m-1]-sum[i+1]){
                t=a[i+1];
                break;
            }
        }
        cout<<t<<endl;
        return 0;
    }

    J
    给定一个n × n的网格,每个方格都是黑色或白色。如果满足以下所有条件,则网格是正确的:每一行/列都有相同数量的黑色正方形和白色正方形。每一行或一列有3个或3个以上相同颜色的连续正方形。

    给定一个网格,判断它是否正确。

    思路:根据他说的循环判断就行

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
     
    int main()
    {
        int n,i,j,flag=0,w,b,b1,w1;
        cin>>n;
        string s[50];
        for(i=0;i<n;i++){
            cin>>s[i];
        }
        for(i=0;i<n;i++){
                w=0,b=0,b1=0,w1=0;
            for(j=0;j<n;j++){
                if(s[i][j]=='W'){
                    w++;
                    b1=0;
                    w1++;
                }
                if(s[i][j]=='B'){
                    b++;
                    w1=0;
                    b1++;
                }
                if(b1>=3 || w1>=3){
                    flag==1;
                    break;
                }
            }
            if(b!=w){
                flag=1;
                break;
            }
        }
        if(flag==1){
            cout<<"0"<<endl;
            return 0;
        }
        flag=0;
        for(i=0;i<n;i++){
                w=0,b=0,b1=0,w1=0;
            for(j=0;j<n;j++){
                if(s[j][i]=='W'){
                    w++;
                    b1=0;
                    w1++;
                }
                if(s[j][i]=='B'){
                    b++;
                    w1=0;
                    b1++;
                }
                if(b1>=3 || w1>=3){
                    flag==1;
                    break;
                }
            }
            if(b!=w){
                flag=1;
                break;
            }
        }
        if(flag==1){
           cout<<"0"<<endl;
            return 0;
        }else{
            cout<<1<<endl;
        }
        return 0;
    }

    H

    思路:求出最短路径-1,(比赛的时候想到了QWQ没写出来)

    (参考大佬代码QWQ)

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <vector>
    #include <queue>
    using namespace std;
    #define ll long long
    const int INF = 0x3f3f3f;
    const int maxn = 100005 * 2;
    
    int m,n;
    bool vis[maxn] = {0};
    vector<int> vec[maxn];
    int dis[maxn] = {0};
    queue<ll> q;
    
    int main() {
        cin >> n >> m;
        int u,v;
        for(int i  = 1; i <= m; ++i) {
            cin >> u >> v;
            vec[u].push_back(v);
            vec[v].push_back(u);
        }
        q.push(1); vis[1] = 1;
        while(!q.empty()) {
            int u = q.front();
            q.pop();
            for(int v:vec[u]) {
                if(vis[v]) continue;
                vis[v] = 1;
                dis[v] = dis[u] + 1;
                q.push(v);
            }
        }
        cout << dis[n]<< endl;
        return 0;
    }
  • 相关阅读:
    Windows 7系统安装MySQL5.5.21图解
    VB中DateDiff 函数解释
    curl命令具体解释
    SecureCRT 6.7.1 注冊机 和谐 破解 补丁 方法
    CSDN--十年
    SxsTrace工具用法
    Gamma校正及其OpenCV实现
    Linux--对文件夹下的配置文件批量改动IP
    sublime配置全攻略
    awk笔记
  • 原文地址:https://www.cnblogs.com/a-specter/p/14530248.html
Copyright © 2020-2023  润新知