牛客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,此外它的颜 ...
随机推荐
- java利用注解及反射做通用的入参校验
一.原理: 1.做一个field注解,注解有两个参数:是否必填.toString之后的最大长度 2.对某个request类(或基类),使用注解标记某个字段的校验详情 3.通用的static方法,利用反 ...
- jdk 1.7新特性
JDK1.7新特性 1,switch中可以使用字串了String s = "test"; switch (s) { case "test" : ...
- NOI-动规题目集锦
162:Post Office 解题思路 #include<bits/stdc++.h> using namespace std; ],f[][],mi[][],i,j; int main ...
- storm单节点问题(转载)
一.storm nimbus 单节点问题概述 1.storm集群在生产环境部署之后,通常会是如下的结构: 从图中可以看出zookeeper和supervisor都是多节点,任意1个zookeeper节 ...
- Effective.Java第78-90条(同步相关)
78. 同步访问共享的可变数据 为了在线程之间进行可靠的通信,也为了互斥访问,同步是必要的. 不共享可变的数据.要么共享不可变的数据,要么压根不共享.换句话说,将可变数据限制在单线程中. 当多个线程 ...
- 分享一个Linux C++消息通信框架TCPSHM
由于本人从事行业关系,Linux环境下的低延迟通信是我关注的技术之一.要达到极端的低延迟,当然同机器内IPC比网络通信快,而Linux IPC方式中无疑是共享内存延迟最低.不过相对于TCP这种通用的通 ...
- 爬虫框架之selenium
Selenium 一.概述 Web自动化测试工具,可以运行在浏览器,根据指令操作浏览器 只是工具,必须与第三方浏览器结合使用 安装: Linux:sudo pip3 install selenium ...
- flask异常处理:abort、errorhandler、app_errorhandler,封装全局异常处理
目录 1. abort() 1.1 使用方式一:传递一个错误码 1.2 使用方式二:传递一个json格式字符串 1.3 使用方式三:传递一个响应体 2. errorhandler 2.1 简单使用: ...
- nginx部署angular
官方部署教程 本文将angular官网的示例项目 heroes(英雄指南) 部署到nginx. 使用angular cli编译项目 ng build 执行完成后会生成一个 dist 目录. 服务器配置 ...
- Ubuntu 使用scrapy-splash
配置docker 1.更新apt索引: $ sudo apt-get update 2.安装包允许apt通过HTTPS使用仓库: sudo dpkg --configure -a sudo apt ...