Codeforces Round #658 (Div. 2)

2023-05-16

比赛链接:https://codeforces.com/contest/1382

A.Common Subsequence

题意

给你两组数,问你有没有相同 的书,有的话,输出最短的那组(大家都知道,1是最小的)

AC

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const LL N=50005;
int a[1005],b[1005];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,m;
        memset(a,0,sizeof(a));
        scanf("%d%d",&n,&m);
        int x;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            a[x]++;
        }
        int flog=0;
        for(int i=1;i<=m;i++)
        {
            scanf("%d",&x);
            if(a[x])
            {
                flog=x;
            }
        }
        if(flog)
        {
            printf("YES\n");
            printf("1 %d\n",flog);
        }
        else
        {
            printf("NO\n");
        }
    }
    return 0;
}

B.Sequential Nim

题意:

两个人玩区石子游戏,有n堆,第i堆有a[i]个,每个人只能按堆的顺序拿,就是前面这堆没有拿完,不能拿下一堆。谁先不能拿就输了。

思路:

谁先遇到大于1的石子堆,谁就一定不会输,因为大于1的石子堆,我可以选择全拿完和留一个,这两种状态结果是互斥的,必定会有一个状态的必胜态,所以只要判断到大于1的数前面的1的数量就行,若是全1的情况,那就轮流拿,单独判断一下就行。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const LL N=50005;
int a[1005],b[1005];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        int num=0,flog=0;
        int x;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            if(x==1&&flog==0)
            {
                num++;
            }
            if(x>1)
            {
                flog=1;
            }
        }
        if((num%2==1&&flog)||(num%2==0&&flog==0))
        {
            printf("Second\n");
        }
        else
        {
            printf("First\n");
        }
    }
    return 0;
}

C2 Prefix Flip (Hard Version)

题意;

给你两个长度相同的01字符串a,b,有一种操作,我们可以把一个字符串长度为x的前缀拿出来,把0,1互换,(就像是异或一下)然后再把这个前缀翻转(掉个头)放回到原字符串中,问我们通过几次这种操作把a转换为b。操作数小于2*n;

思路:

因为我们每次拿的都是前缀,那么也就是说,后面的不会动了,那么我们可以从后往前来,遇到不同的,就判断a开头位置和b当前位置(因为不同就要进行”异或“然后翻转,会把第一个数翻转到当前位置上,所以判断a第一个位置和b当前位置)
如果第一位置和当前位置相同,要把第一位置单独转一下,(因为相同,异或再转过来就不同了)记录一下每次翻转的位置就是答案。
C1可以暴力模拟,C2就要有技巧的记录用当前所翻转的区间,然后也是模拟。

AC

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const LL N=100005;
char a[N],b[N];
int ans[2*N];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        scanf("%s%s",a,b);
        int num=0;
        int l=0,r=n-1;
        int flog=0;
        int fz=0;
        for(int i=n-1;i>=0;i--)
        {

            if(flog==0)
            {
                if((b[i]!=a[r]&&fz%2==0)||(fz%2&&b[i]==a[r]))
                {
                    if((b[i]==a[l]&&fz%2==0)||(b[i]!=a[l]&&fz%2))
                    {
                        ans[num++]=1;
                    }
                    ans[num++]=i+1;
                    fz++;
                    flog=1;
                    l++;
                }
                else
                {
                    r--;
                }
            }
            else
            {
                if((b[i]!=a[l]&&fz%2==0)||(b[i]==a[l]&&fz%2))
                {
                    if((b[i]==a[r]&&fz%2==0)||(b[i]!=a[r]&&fz%2))
                    {
                        ans[num++]=1;
                    }
                    ans[num++]=i+1;
                    fz++;
                    flog=0;
                    r--;
                }
                else
                {
                    l++;
                }
            }
        }
        printf("%d\n",num);
        for(int i=0;i<num;i++)
        {
            printf("%d ",ans[i]);
        }
        if(num)printf("\n");
    }
    return 0;
}

D. Unmerge

比赛打着当时没看,直接睡了,其实也是挺水的题

题意

给你一个长度为2n的数组,为你是不是由两个为n的数组构成的。
构成原理
假设两个数组a,b,长度分别是n,m;
每次取两个数组的最小值到新数组。
最后新数组长度为(n+m)
比如a(3,1),b(2,4)
a+b=(2,3,1,4).

思路

其实就是一个小背包,我们可以发现每次去数,只能取到下一个大于当前数的位置,那么我们记录一下这些数的数量,记录完了之后,我们可以选择每个区间取或者不取,取就放a数组,不取就放b数组,最后我们只需要判断能不能构成长度为n的a数组就行(因为给出的数组长度为2*n)

AC

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const LL N=100005;
int dp[4005];
int a[4005];
int v[4005];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        int tot=0,k=1;
        for(int i=1;i<=2*n;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]>a[k])
            {
                v[++tot]=i-k;
                k=i;
            }
        }
        v[++tot]=2*n+1-k;
        memset(dp,0,sizeof(dp));
        dp[0]=1;
        for(int i=1;i<=tot;i++)
        {
            for(int j=n;j>=v[i];j--)
            {
                dp[j]=max(dp[j-v[i]],dp[j]);
            }
        }
        if(dp[n])
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
    }
    return 0;
}

E Mastermind

待补…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Codeforces Round #658 (Div. 2) 的相关文章

  • 完全可以用window.open()代替window.showModalDialog()的方法

    转 http www javaeye com topic 123995 有两个页面 一个是调用页面 main html 一个是被调用页面 modalWindow html main html click here
  • C. Doremy‘s IQ(二分/贪心)

    题目 题意 给定n个任务和艾米的智商q 艾米要按顺序处理这n个任务 每个任务有难度值a i 对于每个任务 艾米可以选择处理 也可以选择不处理 如果艾米当前的智商q大于等于任务a i 则艾米可以直接处理该任务 智商不受任何影响 如果艾米当前的
  • Catowice City【Codeforces 1248 F】【Tarjan】

    Codeforces Round 594 Div 2 F 这道题的解法还真是不少 写了个枚举也可以做这道题 当然Tarjan自然也是可以的 我一开始没捋清楚思路 再想想 发现 我们看到审判者 他们都会指向一些参赛选手 那么我们是不是可以尽力
  • 实践DIV+CSS网页布局入门指南

    实践DIV CSS网页布局入门指南 你正在学习CSS布局吗 是不是还不能完全掌握纯CSS布局 通常有两种情况阻碍你的学习 第一种可能是你还没有理解CSS处理页面的原理 在你考虑你的页面整体表现效果前 你应当先考虑内容的语义和结构 然后再针对
  • Codeforces Round #328 (Div. 2)(A B C D)

    Codeforces Round 328 Div 2 tags Codeforces 难得题目不难 结果比赛的时候C题差一分钟没交上去 不然怎么着都能涨个百来分啊 T T Codeforces Round 328 Div 2 A PawnC
  • codeforces Gym 101341 K Competitions

    Problem codeforces com gym 101341 problem K vjudge net contest 162325 problem K Meaning 有 n 场比赛 每一场有 开始时间 a 结束时间 b 价值 c
  • 上下div之间有间距的问题

    我写了4个div 上下分布 均存在间距 代码以及效果如下 div1 height 100px background color blue position relative div2 height 100px background colo
  • 动态动态规划(DDP)

    1 Problem E Codeforces 一 题目大意 给你一个无向图 第i和i 1条边的权值是w i 问你每个点不在自己原本的点的代价是多少 会有q组询问 表示修改第i条边的权值 二 解题思路 可以观察到 完成这个操作需要每条边经过两
  • Catowice City【Codeforces 1248 F】【BFS】

    Codeforces Round 594 Div 2 F 一开始是听闻有人说这是一道Tarjan好题 然后就点进来做了 但是想来想去 却想了个另类的法子 我们可以看到 如果N个人都要选择的话 那么每个人都只能是审判者 或者是参赛者 所以 我
  • Codeforces Round#808 div.1+div.2题解

    视频讲解 BV1ya411S7KF div 2 A Difference Operations 题目大意 给定长度为 n n n 的数组 a a a 可以进行任意次操作 每次操作选择一个整数
  • 1500*B. Coloring(找规律&鸽巢原理)

    include
  • 1600*B. Jumping Jack(数学&&找规律)

    解析 一直往右条 直到第一次超过 x 如果当前和目标点 p x为偶数 则 p x 2 的那一步向左跳 这样会少跳 p x 正好补在多跳的这一段 如果为奇数 则不能除2 则继续跳 直到距离为偶数即可 x和x答案一样 include
  • css控制页面打印(分页、屏蔽不需要打印的对象)

    样式 注 不需要打印的对象要用上 Noprint 样式 需要换页处理的对象要用上 PageNext 样式 因为最后一页不用加入换页符 所以要控制最后一页不要使用该样式 个人感觉用PAGE BREAK BEFORE属性控制第一页要方便一些
  • gym 101505 CTU Open Contest 2016 G Orchard Division

    Problem codeforces com gym 101505 attachments vjudge net contest 187874 problem G Meaning 一个 m m 的网格 长 宽下标 0 m 1 里有 n 个点
  • Discuz!X模板代码解析--Header(头文件)

    Discuz X模板代码解析 Header 头文件 header html这个文件存储于common文件下 这个大家应该不陌生吧 我是每个DIV为小节来讲 头部的核心div我就不加if语句来讲解 因为代码太多了 我会在最下面给大家总结一下
  • Codeforces Round #561 (Div. 2)ABC

    三个题 各位大佬别喷我 我很菜 A Silent Classroom There are n students in the first grade of Nlogonia high school The principal wishes
  • 1600*D. Road Map(数学

    解析 记录每个点的父节点和子节点 从新的根节点开始遍历 遍历所有的非父结点即可 include
  • 简短的 mouseover 显示与隐藏层的办法

    简短的 mouseover 显示与隐藏层的办法 在制作 mouseover 和 mouseout 显示 隐藏层的时候 有时总会出现 mouseover 层里面的对象时 层消失的情况 这是因为mouseover 层内 对象时 会对前层产生两个
  • Codeforces 1475C. Ball in Berland(二元容斥)

    题目传送门 题意 一个班级有a个男生和b个女生 现在这个班级有k对男女愿意一起出席毕业典礼 这里注意k对男女中可能会有某个男生或女生出现在多个pair中 你从这k对中找出两对 使得这两对中的男生不相同 女生不相同 即一个男生或女生不可能在一
  • Python中保留两位小数的几种方法

    保留两位小数 并做四舍五入处理 方法一 使用字符串格式化 gt gt gt a 12 345 gt gt gt print 2f a 12 35 gt gt gt 方法二 使用round内置函数 gt gt gt a 12 345 gt g

随机推荐

  • 快速搭建私有pip镜像源

    1 快速体验 span class token keyword import span os span class token keyword import span sys span class token keyword import
  • 虚拟机Ubuntu18.04突然连不上网怎么解决

    本来正常使用ubuntu18 04 xff0c 突然连不上网 使用sudo apt get update无法连接到域名 采用如下方法解决 xff01 xff01 xff01 原文链接 xff1a https blog csdn net qq
  • rpm方式安装 mysql5.7.29

    一 rpm方式安装 mysql5 7 29 1 下载mysql5 7 29的rpm安装包 rpm的mysql包 安装起来简单 解压版的mysql还需要做许多配置 xff0c 稍有不慎就会出错 xff01 xff01 xff01 下载地址 x
  • 必须知道的C语言知识细节:函数形参和实参的区别

    当你选择了一种语言 xff0c 意味着你还选择了一组技术 一个社区 Joshua Bloch C语言中函数形参和实参是十分重要的概念 xff0c 初学者很容易混淆 形参 xff1a 顾名思义 xff0c 形式参数 xff0c 仅仅是声明了参
  • windows和虚拟机互传文件的三种方式

    大家好 xff0c 在平时学习工作的时候可能有这样的需求 xff1a 要将windows中的文件传到虚拟机中或者将虚拟机的文件传到windows xff0c 大家都是怎么实现的呢 xff1f 今天给大家介绍下windows和虚拟机互传文件的
  • dpkg命令详解

    用法 xff1a dpkg lt 选项 gt lt 命令 gt Commands i install lt deb file name gt R recursive unpack lt deb file name gt R recursiv
  • 结构体字节对齐之嵌套结构体

    搜狐畅游2020游戏研发笔试题目 xff1a 以下输出的结果是 xff1f xff1f xff1f span class token macro property span class token directive keyword inc
  • 程序设计CSP-M4-补题——T1-TT数鸭子

    T1 TT数鸭子 题目描述InputOutput解题思路实现代码总结 题目描述 给出n个数 xff0c 求有多少个数其数位中不同的数字的个数小于k Input 第一行两个数n k 第二行n个数 Output 输出满足题目要求的数字个数 解题
  • ceph 分布式 存储服务 恢复

    文章目录 一条命令执行恢复 xff08 你最好还是读读 为什么可以一条命令恢复 ceph 服务 xff09 版本信息ceph 容器服务恢复前提条件安装cephadm查看ceph 服务依赖删除多余的集群 可选 一条命令执行恢复 systemc
  • svn: E230001: Server SSL certificate verification failed: certificate issued

    svn E230001 Server SSL certificate verification failed certificate issued 字面上的大致意思是服务器的SSL证书验证失败 解决方法 xff1a 在终端执行svn ls
  • linuxQt程序打包

    linux程序打包 qt程序打包与执行 将release版本生成的移动到新建文件夹中 xff1b linux下qt打包的sh文件 例如 xff0c 生成pack sh span class token shebang important b
  • JAVA判断时间格式为 “YYYY-MM-DD“

    常用的方法如下 xff1a import java text DateFormat import java text SimpleDateFormat import java util Date public class DataTest
  • win系统修改右键新建菜单

    win系统修改右键新建菜单 在右键新建中添加自己想要的文件修改右键新建顺序修改右键新建中菜单项的名字 在右键新建中添加自己想要的文件 首先win 43 R再regedit调出注册表在HKEY CLASSES ROOT目录下找到对应后缀名 x
  • Django基础(一)

    目录 创建项目 创建一个应用 启动服务 创建项目 D pythonProject3 Django gt django admin startproject hello 执行完成命令 大概10s之后会出现一个以hello命名的文件夹 创建一个
  • 二分图多重匹配——小结

    二分图的重匹配 xff0c 说白了就说一对多的匹配 还是匈牙利算法 xff0c 一般都是给出两个集合 xff0c 然后让你对这两个集合进行匹配 xff0c 但是其中一个集合是可以多次匹配的 xff0c 但是匹配的次数是有限的 xff08 假
  • C.Garland(DP)

    题目链接 xff1a C Garland 题意 给你了一个序列 xff0c 包含n个数 xff0c 这个序列是由1 n数字构成 xff0c 但是题目给你的这个序列并不完整 xff0c 让你去补完整 xff0c 那些输入的值为0的位置的就是让
  • P1908 逆序对(离散化)

    洛谷P1908 逆序对 逆序对就不用解释了 xff0c 题上也说的很清楚 那我分别用归并排序和树状数组来解决一下这道题目 归并排序 我们都知道 xff0c 归并排序是通过把大区间一直分 xff0c 分成小区间 xff0c 然后小区间排序好了
  • Codeforces Round #618 (Div. 2)

    太菜了 xff0c 也只能补补题了 A Non zero 这道题瞎弄一下就过了 xff0c 数0的个数 xff0c 把0全变成1 xff0c 然后再判断现在和是不是0 xff0c 和是0的话就再加上1 span class token ma
  • HDU 1025最长递增子序列(二分法)

    最长递增子序列 xff08 二分 xff09 HDU1025 https www felix021 com blog read php 1587 找最长递增子序列 xff0c 以前一般用DP的方法找 xff0c 因为理解简单 xff0c 实
  • Codeforces Round #658 (Div. 2)

    比赛链接 xff1a https codeforces com contest 1382 A Common Subsequence 题意 给你两组数 xff0c 问你有没有相同 的书 xff0c 有的话 xff0c 输出最短的那组 xff0