Codeforces Round 850 (Div. 2) D. Letter Exchange

题目

思路:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define fi first
#define se second
#define lson p << 1
#define rson p << 1 | 1
const int maxn = 1e6 + 5, inf = 1e9, maxm = 4e4 + 5;
const int N = 1e6;
// const int mod = 1e9 + 7;
const int mod = 998244353;
// int a[505][5005];
// bool vis[505][505];
// char s[505][505];
int a[maxn], b[maxn];
int vis[maxn];
string s;
int n, m;

struct Node{
    int val, id;
    bool operator<(const Node &u)const{
        return val < u.val;
    }
};
// Node c[maxn];

int ans[maxn];
int pre[maxn];

//long long ? maxn ?

char change(char ch){
    if(ch == 'w') return 'a';
    if(ch == 'i') return 'b';
    return 'c';
}

char rechange(int id){
    if(id == 0) return 'w';
    if(id == 1) return 'i';
    return 'n';
}
void solve(){
    int res = 0;
    int q, k;
    int sum = 0;
    int mx = 0;
    cin >> n;
    // for(int i = 1; i <= n; i++){
    //     cin >> a[i];
    // }
    vector<int> vec[3][3];
    for(int i = 1; i <= n; i++){
        string s;
        cin >> s;
        int cnt[3] = {0};
        int tot = 0;
        for(int j = 0; j < 3; j++){
            s[j] = change(s[j]);
            char ch = s[j];
            if(!cnt[ch - 'a']){
                tot++;
            }
            cnt[ch - 'a']++;
        }
        if(tot == 3) continue;
        if(tot == 1){
            int id = s[0] - 'a';
            for(int j = 0; j < 3; j++){
                if(j != id){
                    vec[id][j].pb(i);
                    // cout << i << ' ' << id << ' ' << j << '\n';
                }
            }
        }
        else{
            int more, less;
            for(int j = 0; j < 3; j++){
                if(cnt[j] == 2){
                    more = j;
                }
                else if(!cnt[j]){
                    less = j;
                }
            }
            vec[more][less].pb(i);
        }
        // cout << i << ' ' << tot << '\n';

    }

    vector<array<int, 4>> ans;
    for(int i = 0; i < 3; i++){
        int j = (i + 1) % 3;
        // cout << i << ' ' << j << ":\n";
        // for(auto x : vec[i][j]){
        //     cout << x << ' ';
        // }
        // cout << '\n';
        // cout << j << ' ' << i << ":\n";
        // for(auto x : vec[j][i]){
        //     cout << x << ' ';
        // }
        // cout << '\n';
        while(!vec[i][j].empty() && !vec[j][i].empty()){
            int x = vec[i][j].back(), y = vec[j][i].back();
            vec[i][j].pop_back();
            vec[j][i].pop_back();
            // cout << x << ' ' << rechange(i) << ' ' << y << rechange(j) << '\n';
            ans.pb({x, rechange(i), y, rechange(j)});
        }
    }
    while(!vec[0][1].empty()){
        int i = vec[0][1].back(), j = vec[1][2].back(), k = vec[2][0].back();
        vec[0][1].pop_back();
        vec[1][2].pop_back();
        vec[2][0].pop_back();
        ans.pb({i, rechange(0), j, rechange(1)});
        ans.pb({j, rechange(0), k, rechange(2)});
    }
    while(!vec[0][2].empty()){
        int i = vec[0][2].back(), j = vec[2][1].back(), k = vec[1][0].back();
        vec[0][2].pop_back();
        vec[2][1].pop_back();
        vec[1][0].pop_back();
        ans.pb({i, rechange(0), j, rechange(2)});
        ans.pb({j, rechange(0), k, rechange(1)});
    }
    cout << ans.size() << '\n';
    for(auto [x, c1, y, c2] : ans){
        cout << x << ' ' << char(c1) << ' ' << y << ' ' << char(c2) << '\n';
    }
}
    
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int T = 1;
    cin >> T;
    while (T--)
    {
        solve();
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/502122.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

拥抱挑战,开启增长:2024年全球产品团队的OKR策略

2024年&#xff0c;全球经济格局进入重塑阶段。消费者在消费选择上趋于严苛&#xff0c;企业需推出更具吸引力的产品与服务&#xff0c;以赢得消费者的青睐。同时&#xff0c;企业需通过持续创新&#xff0c;提升产品竞争力&#xff0c;方能在充满挑战的市场环境中实现持续增长…

node.js学习(2)

版权声明 以下文章为尚硅谷PDF资料&#xff0c;B站视频链接&#xff1a;【尚硅谷Node.js零基础视频教程&#xff0c;nodejs新手到高手】仅供个人学习交流使用。如涉及侵权问题&#xff0c;请立即与本人联系&#xff0c;本人将积极配合删除相关内容。感谢理解和支持&#xff0c;…

Jmeter 从登录接口提取cookie 并 跨线程组调用cookie (超详细)

文章目录 一、开始前的准备二、 业务场景介绍三、从登录接口提取cookies四、跨线程组调用cookies 一、开始前的准备 1、安装Jmeter&#xff0c;参考文章&#xff1a;JMeter 3.1 和JMeterPlugin的下载安装 2、设置配置文件使Cookie管理器保存cookie信息。 修改apache-jmeter-x…

DAY16 二叉树最大深度最小深度完全二叉树节点个数

9.二叉树的最大深度 递归法 后序遍历 本题可以使用前序&#xff08;中左右&#xff09;&#xff0c;也可以使用后序遍历&#xff08;左右中&#xff09;&#xff0c;使用前序求的就是深度&#xff0c;使用后序求的是高度。 二叉树节点的深度&#xff1a;指从根节点到该节点…

安装和使用 Oracle Database 23c 容器鏡像

Oracle Database 23c 是 Oracle 最新的数据库版本&#xff0c;它带来了许多新特性和性能改进。 对于开发者来说&#xff0c;Oracle 提供了一个免费的开发者版&#xff0c; 可以通过 Docker 容器轻松安装和使用。以下是详细的安装和使用指南。 安装 Docker 在开始之前&#xff0…

FME学习之旅---day17

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 【FME-HOW-TO系列】28 栅格邻域函数 RasterConvolver转换器说明&#xff1a; 接受包含栅格几何对象的输入要素&#xff0c;并在对所有波段应用卷积滤波 器后输出要素。 本人对栅格数据处理的较…

npm mongoose包下载冲突解决之道

我在新电脑下载完项目代码后,运行 npm install --registryhttps://registry.npm.taobao.org 1运行就报错&#xff1a; npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: lowcode-form-backend1.0.0 npm …

Find Any File (FAF) for Mac:您的专属文件搜索神器

在数字时代&#xff0c;我们的Mac硬盘中堆积着各式各样的文件&#xff0c;从工作文档到家庭照片&#xff0c;从音乐视频到学习资料&#xff0c;无一不体现出我们的生活和工作的丰富多彩。然而&#xff0c;当我们需要快速找到某个特定文件时&#xff0c;却常常在茫茫文件海中迷失…

送朋友的生日祝福静态页面代码!(小白也能轻松GET!)

Hey亲爱的小白们&#xff01;&#x1f44b; 知道你们想给朋友一个独特又有心的生日祝福&#xff0c;却苦于没有编程基础吗&#xff1f;别担心&#xff0c;来白嫖&#xff01;&#x1f381; &#x1f680;【生日祝福静态页面代码】来啦&#xff01;只需简单几步&#xff0c;就能…

Redis 的慢日志

Redis 的慢日志 Redis 的慢日志&#xff08;Slow Log&#xff09;是用于记录执行时间超过预设阈值的命令请求的系统。慢日志可以帮助运维人员和开发人员识别潜在的性能瓶颈&#xff0c;定位那些可能导致 Redis 性能下降或响应延迟的慢查询。以下是 Redis 慢日志的相关细节&…

【LV16 day1 自动mknod】

一、起源 仅devfs&#xff0c;导致开发不方便以及一些功能难以支持&#xff1a; 热插拔 不支持一些针对所有设备的统一操作&#xff08;如电源管理&#xff09;不能自动mknod用户查看不了设备信息设备信息硬编码&#xff0c;导致驱动代码通用性差&#xff0c;即没有分离设备和…

Web前端—(原生JS)歌词滚动效果

歌词滚动效果实现 歌词滚动效果HTML部分CSS部分JS部分解析歌词字符串&#xff0c;得到歌词的对象数组计算在当前情况下&#xff0c;播放器播放到第几秒的情况创建歌词元素设置ul元素的偏移量最后对时间变化的事件进行监听完整JS代码 歌词滚动效果 实现效果如图所示&#xff1a…

防静电工作台:静电敏感环境下的必备设备

在当今的电子制造、精密仪器制造、化学实验室等领域&#xff0c;静电敏感性已成为一个不可忽视的问题。静电可能对设备和操作人员造成严重损害&#xff0c;因此防止静电的产生和传导是至关重要的。在这样的背景下&#xff0c;防静电工作台应运而生&#xff0c;成为这些领域中不…

【蓝桥杯省赛真题37】python农田划分 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python农田划分 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python农田划分 第十三届蓝桥杯青少年组python比赛省赛真题 一、题目要求…

kafka学习笔记02(小滴课堂)

Kafka命令行生产者发送消息和消费者消费消息实战 已存在的kafka不能重复创建。 broker设置的是1&#xff0c;factor大于broker了&#xff0c;所以报错。 生产者发送消息&#xff1a; kafka列表出现了新的kafka。 我们使用这个kafka。 我们启动消费者&#xff1a; 我们现在不从…

【dll解密】Dll加壳保护方案分析修复

分析背景 NGame游戏海外版出现了破解版&#xff0c;该版本在dump出游戏的dll中不能直接通过反编译工具查看修改后的游戏代码&#xff0c;导致无法确定外挂修改的直接逻辑点。本文主要针对AssemblyCSharp.dll模版&#xff0c;分析其dll保护的方法。 分析过程 1、拿到Encrypt_As…

【动手学深度学习-pytorch】 9.4 双向循环神经网络

在序列学习中&#xff0c;我们以往假设的目标是&#xff1a; 在给定观测的情况下 &#xff08;例如&#xff0c;在时间序列的上下文中或在语言模型的上下文中&#xff09;&#xff0c; 对下一个输出进行建模。 虽然这是一个典型情景&#xff0c;但不是唯一的。 还可能发生什么其…

【LVGL-使用SquareLine Studio设计器 】

LVGL-使用SquareLine Studio设计器 ■ 简介■ 安装■ SquareLine Studio移植到工程 ■ 简介 SquareLine Studio 设计器是一个付费软件。 ■ 安装 SquareLine Studio 设计器的下载地址 我们点击“WINDOWS”下载 SquareLine Studio 设计器&#xff0c;下载完成之后我们就会得到…

GIS硬核入门,二维地图是如何使用WGS84坐标系来转换成墨卡托投影的xyz地图瓦片切片的详细原理

前言 二维地图一般分成两种&#xff0c;一种是简化的道路地图视图&#xff0c;一种是卫星拍摄的高清影像地图。 四种坐标概念理解&#xff1a; 经度和纬度&#xff0c;对应地球上唯一的一个点&#xff08;例如&#xff1a;Google 使用世界大地测量系统 WGS84 标准&#xff0…

Day49:WEB攻防-文件上传存储安全OSS对象分站解析安全解码还原目录执行

目录 文件-解析方案-目录执行权限&解码还原 目录执行权限 解码还原 文件-存储方案-分站存储&OSS对象 分站存储 OSS对象存储 知识点&#xff1a; 1、文件上传-安全解析方案-目录权限&解码还原 2、文件上传-安全存储方案-分站存储&OSS对象 文件-解析方案-目…