牛客NOIP暑期七天营-提高组2C:滑块(平衡树) (这里rope骗分)
A:hash 或者 map 或者trie。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
map<vector<char>,int>mp;
char c[maxn][];
vector<char>S;
int main()
{
int N,M,ans=;
scanf("%d",&N);
rep(i,,N){
scanf("%s",c[i]);
if(c[i][]=='T'||c[i][]=='G'){
int len=strlen(c[i]); S.clear();
rep(j,,len-) S.push_back(c[i][j]);
mp[S]++;
}
}
rep(i,,N) {
if(c[i][]=='A'||c[i][]=='C') {
int len=strlen(c[i]); S.clear();
rep(j,,len-){
if(c[i][j]=='A') S.push_back('T');
if(c[i][j]=='T') S.push_back('A');
if(c[i][j]=='C') S.push_back('G');
if(c[i][j]=='G') S.push_back('C');
}
if(mp[S]>=) ans++,mp[S]--;
}
}
printf("%d\n",ans);
return ;
}
B:贪心+大讨论,或者预处理+二分。
#include<bits/stdc++.h>
#define ll unsigned long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
char c[maxn]; ll a[maxn]; int tot;
void dfs(int L,int A,int B,ll sum)
{
if(A!=&&B!=&&A==B) {
a[++tot]=sum;
}
if(L==) return ;
dfs(L+,A+,B,sum*+);
dfs(L+,A,B+,sum*+);
}
int main()
{
dfs(,,,);
sort(a+,a+tot+);
int T,N;
scanf("%d",&T);
while(T--){
scanf("%s",c+);
int N=strlen(c+);
if(N==) {
rep(i,,) putchar('');
rep(i,,) putchar('');
puts("");
}
else if(N&){
rep(i,,N/+) putchar('');
rep(i,,N/+) putchar('');
puts("");
}
else {
ll x=;
rep(i,,N) x=x*+c[i]-'';
int p=lower_bound(a+,a+tot+,x)-a;
if(p==tot+){
rep(i,,N/+) putchar('');
rep(i,,N/+) putchar('');
puts("");
}
else cout<<a[p]<<endl;
}
}
return ;
}
C:主要是想说明一下,这个rope真的妙。
题意:三者操作,(1,x)表示询问x柱子上最长的且最后的连续0的区间。 (2,num,col)表示新建一个柱子,上面有num个col。 (3,x,y,z)是把x柱子加入到y的z位置后面。
显然是平衡树的题,但是我觉得很难操作,还不如骗分,所以就想了下rope,对于新建和插入,都可以用rope高效实现,只有询问操作,我是暴力的。
#include<bits/stdc++.h>
#include<ext/rope>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
using namespace __gnu_cxx;
const int maxn=;
rope<int>a[maxn],b[maxn]; int P,L[maxn];
void read(int &x){
x=; char c=getchar();
while(c<''||c>'') c=getchar();
while(c>=''&&c<='') x=x*+c-'',c=getchar();
}
int main()
{
int N,opt,num,col,x,y,z,o;
scanf("%d",&N);
rep(i,,N) {
read(opt);
if(opt==){
read(x);
int l=,r=,res=;
for(int i=L[x]-;i>=;i--){
if(a[x][i]==) continue;
else {
int j=i;
while(j>&&a[x][j-]==) j--;
if(i-j+>res) l=j+,r=i+,res=i-j+;
i=j;
}
}
printf("%d %d\n",l,r);
}
else if(opt==){
read(num); read(col);
P++;
//rep(i,1,num){
a[P].insert(L[P],num,col);
L[P]+=num;
//}
}
else {
read(x); read(y); read(z); read(o);
a[y].insert(z,a[x]);
L[y]+=L[x];
if(o==) a[x].clear(),L[x]=;
}
}
return ;
}
牛客NOIP暑期七天营-提高组2C:滑块(平衡树) (这里rope骗分)的更多相关文章
- 牛客NOIP暑期七天营-提高组1
牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/std ...
- 牛客NOIP暑期七天营-提高组6
目录 A-积木大赛 题目描述 link 题解 代码 B-破碎的序列 题目描述 link 题解 C-分班问题 题目描述 link 题解 比赛链接 官方题解 A-积木大赛 题目描述 link 题解 标签: ...
- 牛客NOIP暑期七天营-提高组5+普及组5
————提高组———— 第一题:deco的abs 题目链接:https://ac.nowcoder.com/acm/contest/934/A 因为每个数都可以加任意次 d ,所以可以推出 0 < ...
- 牛客NOIP暑期七天营-提高组3
第一题:破碎的矩阵 题目链接:https://ac.nowcoder.com/acm/contest/932/A 刚看到这题的时候感觉特别熟悉...诶,这不就是codeforces某场比赛的某某 ...
- 牛客NOIP暑期七天营-提高组2
第一题:ACGT 题目链接:https://ac.nowcoder.com/acm/contest/931/A trie树.hash.map遍历 ①.trie树上的节点多记一个rest值表示还有多少 ...
- 牛客NOIP暑期七天营-提高组6C:分班问题 (组合数)
题意:A班有N个人,B班有M个人,现在要组成一个新的班级C班,为了公平,从AB班各抽相同人数的人. 现在求所有方案中,人数之和是多少. 思路:即求Σ k*C(N,k)*C(M,k); 先忽略这个 ...
- 牛客NOIP暑期七天营-提高组5
A:deco的abs. 水题,先%,然后相邻两个数min()一下差值. #include<bits/stdc++.h> #define ll long long using namespa ...
- 牛客NOIP暑期七天营-提高组1 解题报告
https://ac.nowcoder.com/acm/contest/920#question A 构造+双指针 发现m的限制是1e5,而点数是5e4,所以不能构造太多的边,思考一下最短路树的定义. ...
- 牛客NOIP暑期七天营-普及组2D
链接:https://ac.nowcoder.com/acm/contest/926/D来源:牛客网 在一维坐标系中,给定 n条有颜色的线段,第 i条线段的左右端点分别为 li和 ri,此外它的颜 ...
随机推荐
- es6 Decorator修饰器
1.类的修饰: 修饰器(Decorator)函数,用来修改类的行为.修饰器是一个对类进行处理的函数.修饰器函数的第一个参数,就是所要修饰的目标类. @testable class MyTestable ...
- mysql 基本操作 一
1.mysql 管理语句 1)展示数据库列表 mysql> show databases; +--------------------+ | Database | +-------------- ...
- QuantLib 金融计算——基本组件之 Money 类
目录 QuantLib 金融计算--基本组件之 Money 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Money ...
- thinkphp5用了哪些设计模式
一.设计模式简介 首先我们来认识一下什么是设计模式:设计模式是一套被反复使用.容易被他人理解的.可靠的代码设计经验的总结.设计模式不是Java的专利,我们用面向对象的方法在PHP里也能很好的使用23种 ...
- Effective.Java第34-44条(枚举)
34. 使用枚举类型替代整型常量 常量的语义表达不清晰,只能靠前面的名称来区分.枚举具有可读性.更安全.更强大等优势.而且枚举类型对象之间的值比较可以使用==来比较值是否相等的,不是必须使用equa ...
- MarkDown的常规用法
MarkDown的常规用法 标题 # 一级标题 ## 二级标题 ... ###### 六级标题 列表 第二级 - 和 空格 + 和 空额 * 和 空格 第三级 代码块 多行代码块 3个` 回车 单行代 ...
- MQTT v5.0------SUBSCRIBE 报文
SUBSCRIBE 报文 固定报头: 剩余长度字段 表示可变报头的长度加上有效载荷的长度,被编码为变长字节整数. 可变报头 SUBSCRIBE报文可变报头按顺序包含以下字段:报文标识符(Packet ...
- Linux学习笔记之vim操作指令大全
0x00 关于Vim Vim是款强大的文本编辑器,但是众多指令需要学习,这次记录了指令大全方便以后翻阅. Vim的几种模式 正常模式:可以使用快捷键命令,或按:输入命令行. 插入模式:可以输入文本,在 ...
- 示例:WPF中自定义StoryBoarService在代码中封装StoryBoard、Animation用于简化动画编写
原文:示例:WPF中自定义StoryBoarService在代码中封装StoryBoard.Animation用于简化动画编写 一.目的:通过对StoryBoard和Animation的封装来简化动画 ...
- 如何在ASP.NET Core Web API中使用Mini Profiler
原文如何在ASP.NET Core Web API中使用Mini Profiler 由Anuraj发表于2019年11月25日星期一阅读时间:1分钟 ASPNETCoreMiniProfiler 这篇 ...