牛客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,此外它的颜 ...
随机推荐
- linux下安装谷歌拼音输入法
linux下安装谷歌拼音输入法 输入以下命令,等待安装完成. sudo apt-get install fcitx 接着输入,完成安装谷歌中文输入法 sudo apt-get install fcit ...
- js文件获取自身的URL路径
我们做框架开发的时候,经常需要js文件获取的到自身的路径,在网上查了些资料,总结 了两种方式 浏览器支持docment.currentScript.src 直接用这个获取,不用支持的情况 try{ n ...
- Logstash测试的时候,报Error occurred during initialization of VM,Could not reserve enough space for object heap
今天配置Logstash的时候,启动输入logstash ‐e 'input { stdin { } } output { stdout {} }'就开始报错了,Error occurred duri ...
- C#调用摄像头(AForge)实现扫描条码解析(Zxing)功能
网上找了很多代码,都比较零散,以下代码纯自己手写,经过测试.下面有链接,下载后可以直接使用. 介绍: 自动识别:点击Start按钮会调用PC摄像头,代码内置Timer,会每100毫秒识别一下当前摄像头 ...
- golang知识精要(二)
类型 go是**静态类型**语言,不能在运行期改变变量类型. 变量定义 使用var定义变量,自动初始化为零值: 如果提供初始值,可省略变量类型: 函数内部可使用:=定义变量. var x int // ...
- JDK安装及配置——Linux系统
一.首先下载JDK版本 链接如下:https://www.oracle.com/technetwork/java/javase/downloads/index.html 截止写博客时,最新版已经到12 ...
- 简明 Java 错误处理机制
用个最简单的例子来展示为什么需要错误处理,以及怎么用. import java.io.FileInputStream; import java.io.FileNotFoundException; pu ...
- EasyUI datagrid-export 将datagrid的数据导出至Excel-解决科学计数法
通过EasyUI datagrid-export.js 将datagrid的数据导出至Excel的时候,如果有类似身份证一样很长的数字,需要在后台返回数据的时候在数字前增加一个 “ ”,将数字转为字符 ...
- 配置 Mac Chrome Inspect
安装libimobiledevice : Could not connect to lockdownd. Exiting. 报错解决 brew uninstall --ignore-depende ...
- maven下载,上传设置
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3. ...