首页 > 其他分享 >D. Colored Portals

D. Colored Portals

时间:2024-08-20 17:49:27浏览次数:3  
标签:字符 Portals Colored int cin -- vector 字符串

https://codeforces.com/contest/2004/problem/D

题意:给定n个字符串,每个字符串有2个字符,如果两个字符串中有相同的字符,则这两个位置互相到达,到达的代价为坐标距离。并且所有字符串的种类只有6种,给定m个查询,求两个地方到达的最小代价。

思路:直接暴力,为6种字符串编号。如果查询位置上的字符串有相同字符,那可以直接算距离。如果没有相同字符,则检查距离l和r最近的其他4种字符串的位置,取代价最小的一个即可。

总结:感觉代码写复杂了

map<string, int> mapp{{"BG", 0}, {"BR", 1}, {"BY", 2}, {"GR", 3}, {"GY", 4}, {"RY", 5}};

void solve(){
    int n, m;
    cin >> n >> m;

    vector<int> a(n);
    vector<string> t(n);
    for (int i = 0; i < n; ++i) {
        string s;
        cin >> s;
        t[i] = s;
        a[i] = mapp[s];
    }
    vector<array<int, 6>> b(n + 1, {-1, -1, -1, -1, -1, -1});
    for (int i = 0; i < n; ++i) {
        b[i + 1] = b[i];
        b[i + 1][a[i]] = i;
    }
    vector<array<int, 6>> c(n + 1, {-1, -1, -1, -1, -1, -1});
    for (int i = n - 2; i >= 0; --i) {
        c[i] = c[i + 1];
        c[i][a[i + 1]] = i + 1;
    }

    while (m --) {
        int l, r;
        cin >> l >> r;
        l --;
        r --;
        if (l > r) {
            swap(l, r);
        }
        if (t[l][0] == t[r][0] || t[l][0] == t[r][1] || t[l][1] == t[r][0] || t[l][1] == t[r][1]) {
            cout << r - l << '\n';
        }
        else {
            int t1 = a[l];
            int t2 = a[r];
            bool ok = false;
            for (int i = 0; i < 6; ++i) {
                if (i != t1 && i != t2) {
                    if (b[l][i] != -1 || b[r][i] != -1 || c[l][i] != -1 || c[r][i] != -1) {
                        ok = true;
                        break;
                    }
                }
            }
            if (!ok) {
                cout << "-1\n";
            }
            else {
                int res = (int)1e9;
                for (int i = 0; i < 6; ++i) {
                    if (i != t1 && i != t2) {
                        if (b[l][i] != -1) {
                            res = min(res, abs(l - b[l][i]) + abs(r - b[l][i]));
                        }
                        if (c[l][i] != -1) {
                            res = min(res, abs(c[l][i] - l) + abs(r - c[l][i]));
                        }
                        if (c[r][i] != -1) {
                            res = min(res, abs(c[r][i] - l) + abs(c[r][i] - r));
                        }
                        if (b[r][i] != -1) {
                            res = min(res, abs(r - b[r][i]) + abs(l - b[r][i]));
                        }
                    }
                }
                cout << res << '\n';
            }
        }
    }
}

标签:字符,Portals,Colored,int,cin,--,vector,字符串
From: https://www.cnblogs.com/yxcblogs/p/18369952

相关文章

  • D. Bicolored RBS
    原题链接题解真的是无中生有了从左到右遍历,维护两个颜色的嵌套深度(如果把左括号看成+1,右括号看成-1,那就是维护最大和)如果遇到右括号,给目前和较大的那个,如果遇到左括号,给较小的那个code#include<bits/stdc++.h>#definelllonglongusingnamespacestd;voidsolve(){......
  • ColoredBox child 是 Scaffold 颜色失效
    在Flutter中,Scaffold小部件有自己的一组属性来管理其外观,包括背景颜色。当你将Scaffold作为ColoredBox的子小部件时,Scaffold的backgroundColor属性将覆盖ColoredBox的颜色。要解决这个问题,你可以直接设置Scaffold的backgroundColor属性,而不是使用ColoredBox。如......
  • 【源码翻译之交互式对象包 AIS-AIS_ColoredShape.hxx文件 多颜色交互式对象
    类AIS_ColoredShape形状的呈现具有可自定义的子形状属性。此类可以将topods的子拓扑分别设置不同的颜色然后作为一个整体显示成员类型定义文档◆DataMapOfDrawerCompdtypedefNCollection_IndexedDataMap<Handle<AIS_ColoredDrawer>,TopoDS_Compound,TColStd_MapT......
  • Colored Balls
    这道题目的模型倒是可以记住我们发现这个配对很像摩尔投票,所以考虑原数列是否有主元素对于一个集合,我们选出其中最大的\(a_i\),假设剩余的\(a\)的和小于等于\(a_i\)(此时有主元素),那么比较显而易见的就是最终会分出\(a_i\)个组;否则的话,我们考虑下界\(\lceil\frac{\suma}{2}\rcei......
  • D. Colored Balls
    D.ColoredBallsThereareballsof$n$differentcolors;thenumberofballsofthe$i$-thcoloris$a_i$.Theballscanbecombinedintogroups.Eachgroupshouldcontainatmost$2$balls,andnomorethan$1$ballofeachcolor.Considerall$2^n$set......
  • [Qt-ColorEditor] Qt颜色编辑器,QColorDialog的优化版,支持RGB和HSV等多种方式选色
    外观分享一下我实现的颜色编辑器,主要原因是Qt的QColorDialog功能较少没法满足需求,目前已经在zeno中使用了,由于zeno有自己的样式表,所以在zeno里长这样:如果不加样式表的话长这样:功能srgb切换颜色轮选色颜色文字选色颜色滑动条选色,RGB和HSV上一个/当前颜色切换,这个主要......
  • 17 Two-Colored Dominoes
    多米诺骨牌在棋盘上放置多米诺骨牌,两端的颜色都不一样,要求横竖的总和是一样的......
  • Two-Colored Dominoes 题解
    前言看了这道题的几篇题解,感觉讲的方法都比较麻烦,这里讲一个感觉比较简单的方法。思路首先判断是否有解。计算一下每一行和每一列的牌的数量,只要有一个是奇数就无解,否则有解。证明显然,偶数一定可以分成两组,在纸上模拟一下也可以得出。其次看如何构造。对于竖着的牌,显然只对每......
  • coloredlogs用法
    用法下面是一个示例,说明入门是多么容易:importcoloredlogs,logging#创建一个记录器对象。logger=logging.getLogger(__name__)#默认情况下,install()函数会在根记录器上安装一个处理程序,#这意味着从代码中记录消息,您使用的库都将显示在终端上。coloredlogs.install......
  • Pink Noise Is All You Need: Colored Noise Exploration in Deep Reinforcement Lear
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!PublishedasaconferencepaperatICLR2023 ABSTRACT 1INTRODUCTION 2BACKGROUND&RELATEDWORK 3METHOD 4ISPINKNOISEALLYOUNEED? 4.1DOESTHENOISETYPEMATTER? 4.2ISPINKNOISE......