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;
}

 

posted @ 2021-03-13 20:31  一只幽灵飘过  阅读(12)  评论(0编辑  收藏  举报