AtCoder Beginner Contest 167 F - Bracket Sequencing(贪心 比较法 2022WF H题同款)

题目

思路来源

乱搞ac

题解

一个单独的串里的前缀最小值x,前缀和为y

先选x>0 y>0的,选完之后选x<0 y>0的,先选x绝对值小的后大的,

然后选x<0 y<0的,顺序不太显然,但是可以考虑比较法决定哪个在前,

比如,

4

(((
))(

)))((

(3,3)
(-2,-1)
(-3,-1)
(-1,-1)

考虑第二个串和第三个串的顺序时,手玩发现,

当min(a.fi,a.se+b.fi)>min(b.fi,b.se+a.fi),a在前

然后按这个排序一下就过了,其实打开min符号的话,可以发现是良序的,

这个等价于a.se+b.fi>b.se+a.fi,即a.se-a.fi>b.se-b.fi

前缀和-前缀最小值大的在前面

代码

#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
const int N=1e6+10;
vector<P>a,b,c;
int n;
string s[N];
P cal(string &x){
    int mn=0,sum=0;
    for(auto &v:x){
        if(v=='(')sum++;
        else sum--;
        mn=min(mn,sum);
    }
    return P(mn,sum);
}
bool sol(){
    int tot=0;
    rep(i,1,n){
        cin>>s[i];
        P x=cal(s[i]);
        //cout<<"x.fi:"<<x.fi<<" x.se"<<x.se<<endl;
        if(x.fi>=0 && x.se>=0)a.pb(x);
        else if(x.fi<0 && x.se>=0)b.pb(x);
        else c.pb(x);
        tot+=x.se;
    }
    if(tot)return 0;
    sort(b.begin(),b.end(),[&](P a,P b){return a.fi>b.fi;});
    sort(c.begin(),c.end(),[&](P a,P b){return min(a.fi,a.se+b.fi)>min(b.fi,b.se+a.fi);});
    for(auto &x:a)tot+=x.se;
    //cout<<"tot:"<<tot<<endl;
    for(auto &x:b){
        if(x.fi+tot<0)return 0;
        tot+=x.se;
    }
    for(auto &x:c){
        if(x.fi+tot<0)return 0;
        tot+=x.se;
    }
    return 1;
}
int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n;
    cout<<(sol()?"Yes":"No")<<endl;
    return 0;
}

Bonus

2022年WF的签到题H题 同款题目,

顺便可以帮验一下做法耗时,毕竟abc数据比较水

Problem - H - Codeforces

一个极致优化耗时,卡常卡了202ms(c++20)的提交

#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
const int N=1e6+10,M=1e7+10;
char s[M];
struct FastIO{
	FILE *fp;
	static const int S=1e7+10;
	typedef long long ll;
	int wpos;
	char wbuf[S];
	FastIO():wpos(0){}
	inline int xchar(){
		static char buf[S];
		static int len=0,pos=0;
		if(pos==len)pos=0,len=fread(buf,1,S,stdin);
		return buf[pos++];
	}
	inline int xuint(){
		int c=xchar(),x=0;
		while(c<=32)c=xchar();
		for(;'0'<=c&&c<='9';c=xchar())x=x*10+c-'0';
		return x;
	}
	inline int xint(){
		int s=1,c=xchar(),x=0;
		while(c<=32)c=xchar();
		if(c=='-')s=-1,c=xchar();
		for(;'0'<=c&&c<='9';c=xchar())x=x*10+c-'0';
		return x*s;
	}
	inline void xstring(char *s){
		int c=xchar();
		while(c<=32)c=xchar();
		for(;c>32;c=xchar())*s++=c;
		*s=0;
	}
	inline void wchar(int x){
		if(wpos==S)fwrite(wbuf,1,S,stdout);
		wbuf[wpos++]=x;
	}
	inline void wint(int x){
		if(x<0)wchar('-'),x=-x;
		char s[24];
		int n=0;
		while(x||!n)s[n++]='0'+x%10,x/=10;
		while(n--)wchar(s[n]);
		wchar('\n');
	}
	inline void wstring(const char *s){
		while(*s)wchar(*s++);
	}
	~FastIO(){
		if(wpos)fwrite(wbuf,1,wpos,stdout),wpos=0;
	}
}io;
bool sol(){
    static int n,i,j,tot,tot2,mn,sum;
    static int _mn[N],_sum[N],_dif[N],ans[N],id1[N],id2[N],d,e,f;
    n=io.xint();
    for(i=1;i<=n;++i){
        io.xstring(s);
        mn=sum=0;
        for(j=0;s[j];++j){
            if(s[j]=='(')sum++;
            else sum--;
            if(sum<mn)mn=sum;
        }
        if(sum>=0){
            if(mn>=0)ans[++d]=i,tot2+=sum;
            else id1[++e]=i;
        }
        else id2[++f]=i;
        tot+=sum,_mn[i]=mn,_dif[i]=sum-mn,_sum[i]=sum;
    }
    if(tot)return 0;
    sort(id1+1,id1+e+1,[&](int a,int b){return _mn[a]>_mn[b];});
    sort(id2+1,id2+f+1,[&](int a,int b){return _dif[a]>_dif[b];});
    tot=tot2;
    for(i=1;i<=e;++i){
        int p=id1[i];
        if(_mn[p]+tot<0)return 0;
        tot+=_sum[p];
        ans[++d]=p;
    }
    for(i=1;i<=f;++i){
        int p=id2[i];
        if(_mn[p]+tot<0)return 0;
        tot+=_sum[p];
        ans[++d]=p;
    }
    for(i=1;i<=n;++i){
        io.wint(ans[i]);
    }
    return 1;
}
int main(){
    if(!sol())puts("impossible");
    return 0;
}

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

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

相关文章

[Java EE] 多线程(四):线程安全问题(下)

1.5 volatile关键字 我们在了解这个关键字之前,我们首先要把产生线程安全的第4个原因补齐,我们来说说由于内存可见性引起的线程安全问题. 我们来看下面这样一段代码: import java.util.Scanner;public class Demo16 {public static int count 0;public static void main(Str…

PotatoPie 4.0 实验教程(25) —— FPGA实现摄像头图像直方图均衡变换

图像的直方图均衡是什么&#xff1f; 图像的直方图均衡是一种用于增强图像对比度的图像处理技术。在直方图均衡中&#xff0c;图像的像素值被重新分配&#xff0c;以使得图像的直方图变得更均匀&#xff0c;即各个像素值的分布更加平衡。这意味着直方图中每个像素值的频率大致…

在PR中使用 obs 和 vokoscreen 录制的视频遇到的问题

1. obs 录制的视频 在 Adobe Premiere Pro CS6 中只有音频没有视频 2. vokoscreen 录制的视频&#xff0c;没有声音 这是是和视频录制的编码有关系&#xff0c;也和显卡驱动关系 首先 obs 点击 文件 ---> 设置 录制的视频都是可以正常播放的&#xff0c;在PR不行。更…

python爬虫 - 爬取 json 格式数据(股票行情信息:雪球网,自选股)

文章目录 1. 第一步&#xff1a;安装requests库2. 第二步&#xff1a;获取爬虫所需的header和cookie3. 第三步&#xff1a;获取网页4. 第四步&#xff1a;解析网页5. 第五步&#xff1a;解析 json 结构数据体6. 代码实例以及结果展示 python爬虫五部曲&#xff1a; 第一步&…

字符串变量 字符串常量

仅个人笔记 #include<iostream> using namespace std;int main() {char str[] "2232344434";for (int i 0; i < strlen(str); i){printf("%c", *(stri));}const char* arr "12343545";for (int i 0; i < strlen(arr); i){printf…

HackMyVM-Vulny

目录 信息收集 arp nmap nikto WEB信息收集 主页信息收集 gobuster RCE漏洞 反弹shell 提权 系统信息收集 横向渗透 flock提权 信息收集 arp ┌──(root㉿0x00)-[~/HackMyVM] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC…

mysql-sql-练习题-2-窗口函数

窗口函数 访问量max sum建表窗口函数连接 直播间人数 第1、3名建表排名sum 访问量max sum 每个用户截止到每月为止&#xff0c;最大单月访问次数&#xff0c;累计到该月的总访问次数 建表 create table visit(uid1 varchar(5) comment 用户id,month1 varchar(10) comment 月…

【热门话题】Chrome 插件研发详解:从入门到实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Chrome 插件研发详解&#xff1a;从入门到实践一、引言二、Chrome 插件基础概念…

Win32 API 光标隐藏定位和键盘读取等常用函数

Win32 API 光标隐藏定位和键盘读取等常用函数 一、Win32 API二、控制台程序指令modetitlepausecls 三、控制台屏幕上坐标的结构体COORD四、句柄获取函数GetStdHandle五、控制台光标操作1.控制台光标信息结构体CONSOLE_CURSOR_INFO2.得到光标信息函数GetConsoleCursorInfo3. 设置…

Amazon云计算AWS之[5]关系数据库服务RDS

文章目录 RDS的基本原理主从备份和下读写分离 RDS的使用 RDS的基本原理 Amazon RDS(Amazon Relational Database Service) 将MySQL数据库移植到集群中&#xff0c;在一定的范围内解决了关系数据库的可扩展性问题。 MySQL集群方式采用Share-Nothing架构。每台数据库服务器都是…

《架构风清扬-Java面试系列第25讲》聊聊ArrayBlockingQueue的特点及使用场景

ArrayBlockingQueue是BlockingQueue接口的一个实现类之一 这个属于基础性问题&#xff0c;老规矩&#xff0c;我们将从使用场景和代码示例来进行讲解 来&#xff0c;思考片刻&#xff0c;给出你的答案 1&#xff0c;使用场景 实现&#xff1a;基于数组实现的有界阻塞队列&…

TCP/IP协议族中的TCP(二):解析其关键特性与机制

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统 滑动窗口 在前面我们讨论了确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段.这样…

【Python】#5 基础文件IO详解

文章目录 一、文件概述二、文件操作1.文件的打开与关闭2. 文件的读写2.1 读取2.2 写入tips:CSV与JSON文件 一些文件操作小实验《清明》文本写入与读取《红楼梦》人物出现统计&#xff08;部分文本&#xff09; 一、文件概述 文件是数据的集合和抽象&#xff0c;类似&#xff0…

如何增强交友、婚恋平台、金融等平台的安全性

运营商二要素核验是一种数字身份验证方法&#xff0c;主要使用用户的手机号码和姓名作为核验要素。这两个要素被认为是最基本的用户身份信息&#xff0c;通过运营商的数据库来核实其真实性。 在实际操作中&#xff0c;用户需要提供手机号码和姓名进行验证。应用系统会调用接口…

全面了解俄罗斯的VK开户和Yandex投放及内容运营

俄罗斯的VKontakte&#xff08;简称VK&#xff09;和Yandex是两个重要的在线平台&#xff0c;对于希望在俄罗斯市场进行推广的企业来说&#xff0c;了解如何在这些平台上开户和投放广告以及内容运营是非常关键的。 俄罗斯vk广告如何开户&#xff1f; 通过上海上弦进行俄罗斯V…

手写一个RNN前向传播以及反向传播

前向传播 根据公式 st tanh (Uxt Wst-1 ba) ot softmax(Vst by ) m 3 词的个数 n 5 import numpy as np import tensorflow as tf # 单个cell 的前向传播过程 # 两个输入&#xff0c;x_t&#xff0c;s_prev,parameters def rnn_cell_forward(x_t,s_prev,parameter…

每日OJ题_DFS回溯剪枝⑧_力扣494. 目标和

目录 力扣494. 目标和 解析代码&#xff08;path设置成全局&#xff09; 解析代码&#xff08;path设置全局&#xff09; 力扣494. 目标和 494. 目标和 难度 中等 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联…

SpringBoot + Vue实现Github第三方登录

前言&#xff1a;毕业设计终于好了&#xff0c;希望能有空多写几篇 1. 获取Github账号的Client ID和Client secrets 首先点击这个链接进入Github的OAuth Apps页面&#xff0c;页面展示如下&#xff1a; 之后我们可以创建一个新的apps: 填写资料&#xff1a; 创建之后就可以获…

WebGIS面试题(第六期)-GeoServer

WebGIS面试题&#xff08;第六期&#xff09; 以下题目仅为部分题目&#xff0c;全部题目在公众号 {GISer世界} &#xff0c;答案仅供参考!!! 因为本人之前做过相关项目用到了GeoServer&#xff0c;因此在简历上写了熟悉GeoServer。所以在相关面试中都有问到&#xff0c;所以我…

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器&#xff08;Http板块&#xff09; 一、思路图二、Util板块1、Splite板块&#xff08;分词&#xff09;&#xff08;1&#xff09;代码&#xff08;2&#xff09;测试及测试结果i、第一种测试ii、第二种…