2017-10-6 清北刷题冲刺班a.m
1.角谷猜想
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 10010
using namespace std;
char ch[maxn],st[maxn];
int t,top;
int main(){
//freopen("Cola.txt","r",stdin);
freopen("kakutani.in","r",stdin);freopen("kakutani.out","w",stdout);
scanf("%d",&t);
while(t--){
scanf("%s",ch+);
int len=strlen(ch+);
top=;
for(int i=;i<=len;i++){
if(top>&&st[top]==''&&ch[i]==''){//出现13
top=top-;
}
else if(ch[i]!=''&&ch[i]!=''){
top=top+;
st[top]=ch[i];
}
}
if(top==){
printf("0\n");
continue;
}
for(int i=;i<=top;i++){
printf("%c",st[i]);
}
printf("\n");
}
fclose(stdin);fclose(stdout);
return ;
}
100分 栈模拟
2.刀塔(二分答案)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1000010
using namespace std;
int x,y,Asd,jk,A,B,k,ans,t,q,n,Max,nm,a[N],f[N][],Min[N];
void init(){
Min[]=-;
for(int i=;i<=n;i++){
Min[i]=((i&(i-))==)?Min[i-]+:Min[i-];
f[i][]=a[i];
}
for(int j=;j<=Min[n];j++)
for(int i=;i+(<<j)-<=n;i++)
f[i][j]=min(f[i][j-],f[i+(<<(j-))][j-]);
}
int find(int L,int R){
int k=Min[R-L+];
return min(f[L][k],f[R-(<<k)+][k]);
}
int main(){
freopen("dota.in","r",stdin);freopen("dota.out","w",stdout);
scanf("%d%d%d%d",&n,&A,&B,&k);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
init();
for(int i=;i<=n-B-k+;i++){
Max=B-A;
for(int j=A;j<=Max;j++){
nm=B-j;
Asd=find(i,i+j-);
jk=find(i+j+k,i+j+k+nm-);
ans=max(ans,min(Asd,jk));
}
}
cout<<ans;
}
50分 倍增表暴力
/*
题目可以简化为选择一段长为B+K的区间,中间去掉k个数,且去掉k个数后两侧的数都多于a
二分答案,对于每个答案,check的方法就是枚举中间区间的位置,枚举两侧区间最大满足答案的长度判断是否满足上面的条件即可
*/
#include<cstdio>
#include<algorithm>
#define maxn 2000010
using namespace std;
int x[maxn],l[maxn],r[maxn];
int n,a,b,k,ans;
bool check(int c){
for(int i=;i<=n;i++){
if(x[i]>=c)l[i]=l[i-]+;
else l[i]=;
}
for(int i=n;i>=;i--){
if(x[i]>=c)r[i]=r[i+]+;
else r[i]=;
}
for(int i=;i<=n;i++){
if(l[i-]>=a&&r[i+k]>=a&&l[i-]+r[i+k]>=b)return ;
}
return ;
}
int main(){
freopen("dota.in","r",stdin);freopen("dota.out","w",stdout);
//freopen("dota10.in","r",stdin);
int left,right,mid;
scanf("%d%d%d%d",&n,&a,&b,&k);
for(int i=;i<=n;i++){
scanf("%d",&x[i]);
if(x[i]>right)right=x[i];
}
left=,right=right+;
while(left<=right){
int mid=(left+right)>>;
if(check(mid))ans=mid,left=mid+;
else right=mid-;
}
printf("%d",ans);
}
100分 二分答案
3.反击数(kmp+数位dp)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char p[];
int m,f[],a[];
long long dp[][][];
long long l,r,k;
void KMP(){
f[]=;f[]=;
for(int i=;i<m;i++){
int j=f[i];
while(j&&p[i]!=p[j])j=f[j];
f[i+]=p[i]==p[j]?j+:;
}
}
long long dfs(int k,int w,bool limit,bool get){
if(!k)return get;
else if (!limit&&dp[k][w][get]!=-)return dp[k][w][get];
else {
long long ans=;
for(int i=,j=limit?a[k]:;i<=j;i++){
int t=w;
while(t&&p[t]-''!=i)t=f[t];
if(p[t]-''==i)t++;
ans+=dfs(k-,t,limit&&(i==a[k]),get||(t==m));
}
return limit?ans:dp[k][w][get]=ans;
}
}
long long query(long long x){
int cnt=;
while(x){
a[++cnt]=x%;
x/=;
}
memset(dp,-,sizeof(dp));
return dfs(cnt,,,);
}
int main(){
freopen("spenum.in","r",stdin);freopen("spenum.out","w",stdout);
//freopen("Cola.txt","r",stdin);
cin>>l>>r;scanf("%s",p);cin>>k;
m=strlen(p);
KMP();
k+=query(l-);
if(query(r-)<k){
printf("Hey,wake up!");
return ;
}
long long tmp=,ans=l-;
while(tmp<r-l+)tmp=tmp*;
while(tmp){
if(query(ans+tmp)<k)ans+=tmp;
tmp=tmp/;
}
cout<<ans+;
return ;
}
100分 kmp+数位dp
2017-10-6 清北刷题冲刺班a.m的更多相关文章
- 2017-10-4 清北刷题冲刺班p.m
P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...
- 2017-10-4 清北刷题冲刺班a.m
P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...
- 2017-10-3 清北刷题冲刺班p.m
a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...
- 2017-10-3 清北刷题冲刺班a.m
P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...
- 2017-10-2 清北刷题冲刺班a.m
一道图论神题 (god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...
- 2017-10-2 清北刷题冲刺班p.m
最大值 (max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...
- 2017-10-1 清北刷题冲刺班p.m
一道图论好题 (graph) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...
- 2017-10-7 清北刷题冲刺班p.m
测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...
- 2017-10-7 清北刷题冲刺班a.m
测试 A 消失的数字 文件名 输入文件 输出文件 时间限制 空间限制del.cpp/c/pas del.in del.out 1s 512MB题目描述现在,我的手上有 n 个数字,分别是 a 1 ,a ...
- 2017-10-1 清北刷题冲刺班a.m
位运算1 (bit) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥 ...
随机推荐
- Python基础之元组操作
元组的常用操作包括但不限于以下操作: 元组的索引,计数等 这里将对列表的内置操作方法进行总结归纳,重点是以示例的方式进行展示. 使用type获取创建对象的类 type(tuple) 使用dir获取类的 ...
- Spring4自动装配(default-autowire) (转)
原文地址:http://blog.csdn.net/conglinyu/article/details/63684957 Spring 自动装配 通过配置default-autowire 属性,Spr ...
- C++ vector容器删除操作
1.vector::pop_back() 删除vector的最后一个元素,vector的大小减一,删了的元素被销毁. 2.vector::erase() iterator erase (iterato ...
- bzoj 4530 大融合 —— LCT维护子树信息
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4530 用LCT维护子树 size,就是实边和虚边分开维护: 看博客:https://blog ...
- MySQL5.7出现Your password has expired. To log in you must change it using a client that supports expir
今天晚上本来想写bootstrap-fileinput插件集成fastdfs的文章,但是刚启动idea里面的QiYuAdmin就出现了错误: Your password has expired. To ...
- poj 2390 Bank Interest(计算本利和)
一.Description Farmer John made a profit last year! He would like to invest it well but wonders how m ...
- redis的read error on connection错误解决
昨日,公司php调用redis报错:read error on connection 2015-01-29 23:59:050.13330000,redis存放的是用户session. 在网上查询,大 ...
- Python:生成器函数
生成器函数:包含yield语句的函数: 生成器对象:生成器对象和迭代器对象行为相似,都支持可迭代接口:__next__(),若想执行生成器函数内部语句,则需要迭代协议’ A.生成器函数被调用时,并不会 ...
- MongoDB分析工具之一:explain()语句分析工具
explain(),语句分析工具 MongoDB 3.0之后,explain的返回与使用方法与之前版本有了很大的变化,介于3.0之后的优秀特色和我们目前所使用给的是3.0.7版本,本文仅针对Mongo ...
- TS学习之接口
TypeScript的核心原则之一是对值所具有的结构进行类型检查.接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约. interface testType { name: string; ...