Codeforces Round #699 (Div. 2) C. Fence Painting

news2025/1/16 8:14:49

翻译:

You finally woke up after this crazy dream and decided to walk around to clear your head. Outside you saw your house's fence — so plain and boring, that you'd like to repaint it.

You have a fence consisting of 𝑛n planks, where the 𝑖i-th plank has the color 𝑎𝑖ai. You want to repaint the fence in such a way that the 𝑖i-th plank has the color 𝑏𝑖bi.

You've invited 𝑚m painters for this purpose. The 𝑗j-th painter will arrive at the moment 𝑗j and will recolor exactly one plank to color 𝑐𝑗cj. For each painter you can choose which plank to recolor, but you can't turn them down, i. e. each painter has to color exactly one plank.

Can you get the coloring 𝑏b you want? If it's possible, print for each painter which plank he must paint.

Input

The first line contains one integer 𝑡t (1≤𝑡≤1041≤t≤104) — the number of test cases. Then 𝑡t test cases follow.

The first line of each test case contains two integers 𝑛n and 𝑚m (1≤𝑛,𝑚≤1051≤n,m≤105) — the number of planks in the fence and the number of painters.

The second line of each test case contains 𝑛n integers 𝑎1,𝑎2,…,𝑎𝑛a1,a2,…,an (1≤𝑎𝑖≤𝑛1≤ai≤n) — the initial colors of the fence.

The third line of each test case contains 𝑛n integers 𝑏1,𝑏2,…,𝑏𝑛b1,b2,…,bn (1≤𝑏𝑖≤𝑛1≤bi≤n) — the desired colors of the fence.

The fourth line of each test case contains 𝑚m integers 𝑐1,𝑐2,…,𝑐𝑚c1,c2,…,cm (1≤𝑐𝑗≤𝑛1≤cj≤n) — the colors painters have.

It's guaranteed that the sum of 𝑛n doesn't exceed 105105 and the sum of 𝑚m doesn't exceed 105105 over all test cases.

Output

For each test case, output "NO" if it is impossible to achieve the coloring 𝑏b.

Otherwise, print "YES" and 𝑚m integers 𝑥1,𝑥2,…,𝑥𝑚x1,x2,…,xm, where 𝑥𝑗xj is the index of plank the 𝑗j-th painter should paint.

You may print every letter in any case you want (so, for example, the strings "yEs", "yes", "Yes" and "YES" are all recognized as positive answer).

Example

input

Copy

6
1 1
1
1
1
5 2
1 2 2 1 1
1 2 2 1 1
1 2
3 3
2 2 2
2 2 2
2 3 2
10 5
7 3 2 1 7 9 4 2 7 9
9 9 2 1 4 9 4 2 3 9
9 9 7 4 3
5 2
1 2 2 1 1
1 2 2 1 1
3 3
6 4
3 4 2 4 1 2
2 3 1 3 1 1
2 2 3 4

output

Copy

YES
1
YES
2 2
YES
1 1 1
YES
2 1 9 5 9
NO
NO

思路:按顺序来画,后面的可以覆盖前边的。

所以判断可不可以满足,首先我们可以直接看最后一个,存不存在于需要满足的的地方,如果不存在,那么直接就是NO,因为最后一个,无法被覆盖。如果存在,那么给它找个位置,因为多余不需要的画师,都可以画在那个位置,因为最后会被覆盖。所以我们接下来只需要考虑,怎么画,能不能画完这个问题。

我们给每个需要改变的存进去,之后如果有我们有利用vector的back和pop_back来存入和弹出(本来用的map+queue,T到死都过不去的,复杂度太高之后想到了vector的操作),然后每次存,然后如果没有需要画师画的,那就直接画在最后一个画师预定的位置上就好了。到最后,如果还有需要画的地方没有画,那自然就是NO了,之后就是输出即可AC。

代码:

/*Looking! The blitz loop this planet to search way
 
 Only my RAILGUN can shoot it 今すぐ
 
 身体中を  光の速さで
 
 駆け巡った確かな予感
 
 掴め! 望むものなら残さず
 
 輝ける自分らしさで
 
 信じてるよ  あの日の誓いを
 
 この瞳に光る涙それさえも  強さになるから
 
 */
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include <stdio.h>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<tuple>
#include<numeric>
#include<stack>
using namespace::std;
typedef long long  ll;
int n,t;
inline __int128 read(){
    __int128 x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9'){
        if(ch == '-')
            f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9'){
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}
inline void print(__int128 x){
    if(x < 0){
        putchar('-');
        x = -x;
    }
    if(x > 9)
        print(x / 10);
    putchar(x % 10 + '0');
}

int m;
int a[100005];
int b[100005];
int c[100005];
pair<int,int>ff;
void wanyurukong(){
    cin>>n>>m;
//    map<int,int>q;
//    map<int,int>w;
//    map<int,int>e;
    int flag=0;
    vector<int>na;
    vector<int>cc[100005];
    for (int i =1; i<=n; i++) {
        cin>>a[i];
    }
    for (int i =1; i<=n; i++) {
        cin>>b[i];
//        q[b[i]]=1;
        if (a[i]!=b[i]) {
            cc[b[i]].push_back(i);
            flag=1;
//            w[b[i]]++;
        }
    }
    for (int i =1; i<=m; i++) {
        cin>>c[i];
//        e[c[i]]++;
    }
//    if (!q.count(c[m])) {
//        printf("NO\n");return;
//    }
    int kl=-23;
//    for(auto [x,y]:w){
//        if (w[x]>e[x]) {
//            printf("NO\n");return;
//        }
//    }
    
    
    if (cc[c[m]].size()) {
        kl=cc[c[m]].back();
        cc[c[m]].pop_back();
    }
    else{
        for (int i =1; i<=n; i++) {
            if (b[i]==c[m]) {
                kl=i;break;
            }
        }
    }
    if (kl==-23) {
        printf("NO\n");return;
    }
    if (!flag) {
        printf("YES\n");
        for (int i =1; i<=m; i++) {
            printf("%d ",kl);
        }printf("\n");return;
    }
    
    for (int i =1; i<m; i++) {
        if (cc[c[i]].size()==0) {
//            printf("%d ",kl);
            na.push_back(kl);
            continue;
        }
        na.push_back(cc[c[i]].back());
//        printf("%d ",cc[c[i]].back());
        cc[c[i]].pop_back();
        
//        while (!cc.empty()) {
//            ff=cc.front();cc.pop();
//            if (ff.first==c[i]) {
//                w[c[i]]--;
//                printf("%d ",ff.second);
//                break;
//            }
//            cc.push(ff);
//        }
    }
//    printf("%d\n",kl);
    na.push_back(kl);
    for (int i =1; i<=n; i++) {
        if (cc[b[i]].size()>0) {
            printf("NO\n");return;
        }
    }
    printf("YES\n");
    for (int i =0; i<na.size(); i++) {
        printf("%d ",na[i]);
    }printf("\n");
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(); cout.tie();
    cin>>t;
    while (t--) {
        wanyurukong();
    }
    //wanyurukong
    return 0;
}
 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络实验之VTP协议

一、VTP协议简介 VLAN中继协议&#xff0c;VTP&#xff0c;VLAN TRUNKING PROTOCOL&#xff0c;是CISCO专用协议&#xff0c;大多数交换机都支持该协议。VTP负责在VTP域内同步VLAN信息&#xff0c;这样就不必在每个交换上配置相同的VLAN信息。如协议名称&#xff0c;VTP协议需要…

“世界上最鸽派”的央行转鹰,透露了什么信号?

​当地时间周二&#xff0c;日本中央银行结束货币政策会议后宣布&#xff0c;部分调整当前超宽松货币政策&#xff0c;将长期利率波动幅度由正负0.25%扩展至正负0.5%。这一“黑天鹅”令全球投资者感到大为震惊。长期以来&#xff0c;投资者将日本央行看作是最后一家尚未放弃其长…

【Linux】---文件基础I/O(上)

文章目录回顾C语言文件操作接口文件相关的系统调用接口打开和关闭文件文件的打开方式文件描述符文件描述符的分配规则write、read重定向dup2mysell回顾C语言文件操作接口 在C语言中对于文件的操作有着几个常用的接口可以调用 fopen//打开文件 fclose//关闭文件 fprintf//输出…

L1-070 吃火锅(分数 15)

以上图片来自微信朋友圈&#xff1a;这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”&#xff0c;那就厉害了&#xff0c;我们的故事就开始了。 本题要求你实现一个程序&#xff0c;自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。 输入格式&#x…

即时通讯音视频开发数字视频介绍

数字视频就是先用摄像机之类的视频捕捉设备&#xff0c;将外界影像的颜色和亮度信息转变为电信号&#xff0c;再记录到储存介质&#xff08;如录像带&#xff09;。 图像&#xff1a; 是人对视觉感知的物质再现。三维自然场景的对象包括&#xff1a;深度&#xff0c;纹理和亮度…

InnoDB详解2

文章目录InnoDB详解21 行格式1 Compact行格式详解1 变长字段长度列表&#xff08;两个字节&#xff09;2 NULL值列表&#xff08;1个字节&#xff09;3 记录头信息 &#xff08;重点&#xff09;2 Dynamic行格式2 页的上层结构InnoDB详解2 1 行格式 规定每条记录是怎么存储的…

汽车租赁服务小程序开发, 新时代下的行业商机

随着我国经济水平的提升&#xff0c;群众生活水平不断改善&#xff0c;人们的出行方式也发生了非常大的变化&#xff0c;不再依赖传统的出行方式&#xff0c;而是将目光转移到汽车上&#xff0c;作为当下便捷的出行方式之一&#xff0c;在面对远程旅游时却显得有些吃力&#xf…

React扩展:fragment、Context

目录 1.fragment fragment标签能包裹其它标签&#xff0c;但最后不会渲染到DOM树上。 import React, { Component, Fragment } from reactexport default class Demo extends Component {render() {return (<Fragment><input type"text" /><input …

Stealth-Persist混合内存系统中持久应用程序的体系结构支持

文章目录crash-consistent applications 崩溃一致性程序摘要一、引言二、背景A.新兴的非易失性存储器B.混合主存储器(HMM)C.页面缓存策略D. 目前的工业HMM系统E. 持久性内存编程模式F.动机三、设计A.设计要求B.设计选项C.Stealth-PersistD.概述E. Stealth-Persist NVM库的比较四…

如何用DWDM射频光纤技术实现200公里外的站点分集

本文概述了大型卫星和数据通信服务提供商如何通过使用DWDM射频光纤解决方案为Ka波段卫星数据传输实施经济高效的位置分集天线安装。 什么是DWDM技术? DWDM是Dense Wavelength Division Multiplexing的缩写&#xff0c;即密集波分复用技术&#xff0c;指的是一种光纤数据传输技…

pytest-需要模块相应的库

1. pytest-需要模块相应的库 文章地址&#xff1a;http://www.pythonck.com/archives/docs/1-2/13-2/13002-2 http://www.pythonck.com/archives/docs/1-2/13-2/13002-2 pytest-断言、跳过及运行 三元表达式&#xff1a;三元表达式又称三目运算符。在python中并没有三元表达式…

数商云SRM供应商系统打造家居建材企业完整电商数据生态平台

随着5G、物联网、大数据、人工智能、云计算等技术的快速发展&#xff0c;全球科技不断突破创新&#xff0c;推动了整个社会的智能化发展&#xff0c;同时&#xff0c;也带动了包含家居业在内的制造行业的技术创新、产品更迭以及更加精细化的经营管理。 数字经济时代&#xff0…

代替塞规的高精度孔径测量方法——泊肃叶压差法

摘要&#xff1a;针对现有压力衰减法孔径测量中存在的基本概念不清和实施方法不明确等问题&#xff0c;本文详细介绍了压力衰减法的孔径测量基本原理&#xff0c;并重点介绍压差法测量中的高精度压力控制方法&#xff0c;为各种微小孔径和等效孔径的准确测量提供切实可行的解决…

EOF的实际含义

在学习C语言的时候&#xff0c;遇到的一个问题就是EOF。 它是end of file的缩写&#xff0c;表示"文字流"&#xff08;stream&#xff09;的结尾。这里的"文字流"&#xff0c;可以是文件&#xff08;file&#xff09;&#xff0c;也可以是标准输入&#x…

Linux tracepoint 简介

文章目录前言一、跟踪点的目的二、跟踪点的使用2.1 简介2.2 DECLARE_TRACE三、TRACE_EVENT参考资料前言 本文提供了如何在内核中插入跟踪点并将 probe functions 连接到它们的示例&#xff0c;并提供了一些 probe functions 的示例。可以在不创建自定义内核模块的情况下使用跟…

高可用 Canal集群( 秒懂 + 史上最全)

文章很长&#xff0c;而且持续更新&#xff0c;建议收藏起来&#xff0c;慢慢读&#xff01;疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 &#xff1a; 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

工控安全-Modbus协议

文章目录一、什么是Modbus协议二、Modbus通信过程三、Modbus存储区四、Modbus协议类型4.1 Modbus RTU协议4.1.1 Modbus报文帧结构4.1.2 主机对从机读数据操作4.1.3 主机对从机写数据操作4.1.4 10功能码数据解析4.1.5 总结4.2 Modbus ACSII协议4.3 Modbus-TCP4.4 Modbus-PLUS一、…

SecXOps 关键技术 模型更新

模型更新 定义内涵 本节的模型更新是指在模型训练完成并正式上线后&#xff0c;由运维人员采集并提供新的数据对 原有模型进行再训练、更新参数的过程。 技术背景 随着时间的推移&#xff0c;由于周期性事件、突变等状况的发生&#xff0c;当下的数据集和之前用于训练 模型…

Anaconda开发环境

Anaconda开发环境 Anacanda是一个基于数据分析和机器学习的集成环境&#xff08;给我们集成好了数据分析和机器学习对应的各种环境和模块&#xff09; jupyter&#xff1a;就是Anaconda这个集成环境提供的一个基于浏览器可视化的编码工具。 注意事项&#xff1a;在环境搭建的…

如何在 iOS、MacOS 上使用 ChatGPT 和适用于 iPhone 的最佳 ChatGPT 应用程序

目录 什么是聊天 GPT&#xff1f;如何在我的 iPhone 上使用 ChatGPT&#xff1f;适用于 iPhone 的最佳 ChatGPT 应用程序 在过去的几周里&#xff0c;出现了许多 ChatGPT 应用程序和网站。如果您想了解什么是 ChatGPT、如何在 iOS 上使用它以及适用于 iOS 的最佳 ChatGPT 应用…