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骗分)的更多相关文章

  1. 牛客NOIP暑期七天营-提高组1

    牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/std ...

  2. 牛客NOIP暑期七天营-提高组6

    目录 A-积木大赛 题目描述 link 题解 代码 B-破碎的序列 题目描述 link 题解 C-分班问题 题目描述 link 题解 比赛链接 官方题解 A-积木大赛 题目描述 link 题解 标签: ...

  3. 牛客NOIP暑期七天营-提高组5+普及组5

    ————提高组———— 第一题:deco的abs 题目链接:https://ac.nowcoder.com/acm/contest/934/A 因为每个数都可以加任意次 d ,所以可以推出 0 < ...

  4. 牛客NOIP暑期七天营-提高组3

    第一题:破碎的矩阵 题目链接:https://ac.nowcoder.com/acm/contest/932/A    刚看到这题的时候感觉特别熟悉...诶,这不就是codeforces某场比赛的某某 ...

  5. 牛客NOIP暑期七天营-提高组2

    第一题:ACGT 题目链接:https://ac.nowcoder.com/acm/contest/931/A trie树.hash.map遍历  ①.trie树上的节点多记一个rest值表示还有多少 ...

  6. 牛客NOIP暑期七天营-提高组6C:分班问题 (组合数)

    题意:A班有N个人,B班有M个人,现在要组成一个新的班级C班,为了公平,从AB班各抽相同人数的人. 现在求所有方案中,人数之和是多少. 思路:即求Σ k*C(N,k)*C(M,k);    先忽略这个 ...

  7. 牛客NOIP暑期七天营-提高组5

    A:deco的abs. 水题,先%,然后相邻两个数min()一下差值. #include<bits/stdc++.h> #define ll long long using namespa ...

  8. 牛客NOIP暑期七天营-提高组1 解题报告

    https://ac.nowcoder.com/acm/contest/920#question A 构造+双指针 发现m的限制是1e5,而点数是5e4,所以不能构造太多的边,思考一下最短路树的定义. ...

  9. 牛客NOIP暑期七天营-普及组2D

    链接:https://ac.nowcoder.com/acm/contest/926/D来源:牛客网 在一维坐标系中,给定 n条有颜色的线段,第 i条线段的左右端点分别为 li​和 ri​,此外它的颜 ...

随机推荐

  1. SQL中join连接查询时条件放在on后与where后的区别

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...

  2. centos7 安装hadoop2.7.6(分布式)

    本文只做简单介绍,具体步骤操作请参考centos6.5 安装hadoop1.2.1亲测版 本篇只简单介绍安装步骤 1.安装目录 /usr/local/hadoop (HADOOP_HOME) 2,创建 ...

  3. Matlab匿名函数

    Matlab可以通过function去定义一些功能函数,这使得代码变得简洁和高效.但是如果遇到的是一些简单的数学公式组成的函数表达式,继续用function去定义函数,似乎显得有些冗杂和多余.这时候, ...

  4. 67 GC 垃圾回收机制

    GC是JVM中自带的一个线程 他会不定时来堆中回收那些不再使用的对象,以释放内存 可以通过System.gc()来主动建议jvm尽快调度gc来回收垃圾 不同的平台的jvm对GC的策略是有所不同的 我们 ...

  5. Docker 安装 Redis, 搭建 Redis 环境

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  6. DRF的APIView、GenericAPIView、GenericViewSet的原理分析

    一.层次结构 GenericViewSet(ViewSetMixin, generics.GenericAPIView) ---DRF GenericAPIView(views.APIView) -- ...

  7. 汉诺(hanio)塔问题

    规则:大盘子不能压在小盘子上.要求:将A柱子上所有盘(每个盘大小不同)放到C柱子上,使用B柱子作辅助. 比如柱子A上有n个盘,执行以下步骤: 1. 把n-1个盘从源柱移动到临时柱上: 2. 把源柱上剩 ...

  8. Windows定时清理文件处理脚本

    一.运行CMD,输入forfile/?,即可获取forfile的使用方法 /P  路径 /M  文件类型 /D  时间   + | -     +:之后    - :之前   example:-2   ...

  9. JavaScript入门(一)

    JavaScript入门篇—开篇 Document对象 1Document对象表示当前页面,HTML在浏览器中是以DOM形式表示为树形结构.Document是DOM树的根节点.(因此需要查找DOM树中 ...

  10. 2019 找钢网java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.找钢网等公司offer,岗位是Java后端开发,因为发展原因最终选择去了找钢网,入职一年时间了,也成为了面试官 ...