首页 > 其他分享 >The 18th Zhejiang Provincial Collegiate Programming Contest题解

The 18th Zhejiang Provincial Collegiate Programming Contest题解

时间:2022-10-24 00:01:09浏览次数:48  
标签:Provincial Contest int 题解 fav fau fa del find

A. League of Legends

水题。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[6]; 
int b[6]; 

signed main()
{   
    for(int i = 1; i <= 5; i++) cin >> a[i];
    for(int i = 1; i <= 5; i++) cin >> b[i]; 
    int num1 = 0, num2 = 0;
    for(int i = 1; i <= 5; i++){
        num1  += a[i];
        num2 += b[i]; 
    }
    if(num1 >= num2){
        printf("Blue\n"); 
    }
    else printf("Red\n"); 
    return 0;
}

L、String Freshman

首字母出现两次即为不合格。因为这样会造成忽略。

点击查看代码
#include<bits/stdc++.h>
using namespace std;

int n;
char s[100010];
int main()
{  
    scanf("%d%s", &n, s + 1);
    for(int i = 2; i <= n; i++) if(s[i] == s[1]) return puts("Wrong Answer"), 0;
    puts("Correct");
    return 0;
}

G、Wall Game

用map维护坐标编号,用并查集维护连通块,合并的时候维护连通块内的坐标数量和应删除边即可。

点击查看代码
#pragma GCC optimize (2)
#include <bits/stdc++.h>
using namespace std;
#define N 1000010
#define ll long long

template <class T>
inline void read(T& a){
    T x = 0, s = 1;
    char c = getchar();
    while(!isdigit(c)){
        if(c == '-') s = -1;
        c = getchar(); 
    }
    while(isdigit(c)){
        x = x * 10 + (c ^ '0');
        c = getchar(); 
    }
    a = x * s;
    return ; 
}

map <pair<int, int>, int> G; 

int fa[N];

int find_fa(int x){
    return x == fa[x] ? x : fa[x] = find_fa(fa[x]); 
}

int n; 
int tot = 0; 
int del[N];   // del: 每个联通块应当删去的边的个数 
int num[N]; 

int fx[7] = {0, 1, 1, -1, -1, 0, 0}; 
int fy[7] = {0, 0, -1, 0, 1, 1, -1};                       

inline void merge(int u, int v, int delta){
    int fau = find_fa(fa[u]), fav = find_fa(fa[v]); 
    if(fau != fav){
        num[fav] += num[fau]; 
        del[fav] += del[fau] + delta; 
        fa[fau] = fav; 
    }
    return ; 
}

void seek(int x, int y){
    int dx, dy;
    del[G[make_pair(x, y)]] = 0; 
    num[G[make_pair(x, y)]] = 1;  // 1个点 

    set <int> s; 
    map <int, int> g; 

    for(int i = 1; i <= 6; i++){
        dx = x + fx[i]; 
        dy = y + fy[i]; 
        if(!G.count(make_pair(dx, dy))) continue;   // dx,dy 没有被占领
        s.insert(find_fa(G[make_pair(dx, dy)])); 
        g[find_fa(G[make_pair(dx, dy)])]++; 
    }
    
    for(auto it : s){
        
        merge(find_fa(G[make_pair(x, y)]), it, g[it]); 
    }

    return ; 
}

int main(){
    read(n);
    for(int i = 1; i <= (int)1e6; i++)
        fa[i] = i; 

    for(int i = 1; i <= n; i++){
        int opt, x, y;
        read(opt), read(x), read(y); 
        if(!G.count(make_pair(x, y))) G[make_pair(x, y)] = ++tot; 
        if(opt == 1){
              // 向六个边去找
            seek(x, y); 
        }
        else {
             
            int f = find_fa(G[make_pair(x, y)]);  
            // printf("x: %d  y: %d  id: %d  num: %d  del: %d\n", x, y, find_fa(G[make_pair(x, y)]), num[f], del[f]); 
            printf("%d\n", num[f] * 6 - del[f] * 2); 
        }
    }
    return 0; 
}

标签:Provincial,Contest,int,题解,fav,fau,fa,del,find
From: https://www.cnblogs.com/wondering-world/p/16820107.html

相关文章

  • ABC274 题解
    A题目:给定\(A,B\)输出\({B}\over{A}\)保留\(3\)位小数。简答题,和A+Bproblem一样,除一除,保留一下小数。B题目:给定一个\(n\)行\(m\)列由'.'和'#'的方阵,求每列......
  • 【题解】The 2021 ICPC Asia Macau Regional Contest - E Pass The Ball
    问题描述解释相当于给定一个置换群,求\(\sum\limits_{i=1}^{n}i*b_{i}\)题目分析本题这种传球的关系显然是存在循环节的,先考虑一个大小为\(m\)的环,显然我们可以用......
  • 0025:2011年NOIp普及组真题——瑞士轮题解
    题目链接:https://www.luogu.com.cn/problem/P1309如果是新手可能马上会想到sort排序,每比一次就排一次,但是这样的时间复杂度有点高,只有60分;这是因为每次比完赛会产生两个......
  • ABC274D题解
    这是一道较为简单的可行性DP。首先看到题目,很容易想到将横纵坐标一起进行处理,但显然时间会炸飞。所以我们将横纵坐标拆开分别处理,那么就有如下状态:\(dpa_{i,j}\)表示在......
  • Ubuntu20.04运行wiki.js服务器出错问题解决方法
    错误代码:root@xxx:/home/xxxxx/wiki#nodeserverLoadingconfigurationfrom/home/xxxxx/wiki/config.yml...OK2022-10-23T05:00:25.563Z[MASTER]info:============......
  • ABC274G题解
    这是一个比较经典的网络流的建模。首先我们可以横着和竖着给原图编两遍号,能够一次照到的编号相同。以样例一为例:....#....先横着编号:1112#3444再......
  • ABC274C题解
    直接扫一遍,统计即可。点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintMAXN=2e5+5;//charbuf[1<<21],*p1=buf,*p2=buf;//#definegetchar(......
  • AtCoder Regular Contest 100 E-Or Plus Max
    DescriptionThereisanintegersequenceoflength\(2^N\):\(A_0,A_1,...,A_{2^N-1}\).(Notethatthesequenceis0-indexed.)ForeveryintegerKsatisfying......
  • Atcoder Regular Round #151 B题 A < AP 题解
    题意:给定一个排列\(p\),求满足下列条件的\(a\)数组的数量。\(1\lea_i\lem\)。\(a\)数组的字典序小于\(\{a_{p_1},a_{p_2},\cdots,a_{p_n}\}\)。题解:由于每......
  • luogu P8585 球状精灵的传说 题解
    题目大意给定\(n\)个精灵的三维幅度\(\{r_{1,i},r_{2,i},r_{3,i}\}\),任意两个精灵若在三个幅度中有两个相同(这里可以乱序)则可以将剩下的一位相加组合起来。组合过的精......