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

  1. 2017-10-4 清北刷题冲刺班p.m

    P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...

  2. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  3. 2017-10-3 清北刷题冲刺班p.m

    a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...

  4. 2017-10-3 清北刷题冲刺班a.m

    P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...

  5. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  6. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  7. 2017-10-1 清北刷题冲刺班p.m

    一道图论好题 (graph) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...

  8. 2017-10-7 清北刷题冲刺班p.m

    测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...

  9. 2017-10-7 清北刷题冲刺班a.m

    测试 A 消失的数字 文件名 输入文件 输出文件 时间限制 空间限制del.cpp/c/pas del.in del.out 1s 512MB题目描述现在,我的手上有 n 个数字,分别是 a 1 ,a ...

  10. 2017-10-1 清北刷题冲刺班a.m

    位运算1 (bit) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥 ...

随机推荐

  1. 如何让DIV可编辑、可拖动

    1.可编辑: <div id="move" contentEditable="true">可编辑</div> 设置contentEdit ...

  2. 为什么jdk1.8不支持sql.append,该如何解决

    StringBuilder sql = new StringBuilder("SELECT ID,COMMAND,DESCRIPTION,CONTENT FROM message where ...

  3. 关于python包,模块,.pyc文件和文件导入理解

    参考文献 一.包 包是一个文件夹,用来存放模块和子包. 包里一般会有一个__init__.py的文件(也可以没有). 包里会有一个__pycache__文件夹,存放.py文件经解释器解释后的中间字节码 ...

  4. 【leetcode刷题笔记】Sum Root to Leaf Numbers

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...

  5. html之canvas

    canvas代码片段: <canvas id="testCanvas" width="400" height="150" style= ...

  6. mesos的zookeeper变更

    采用rpm方式安装你了mesos,碰到zookeeper(采用了cloudera的zookeeper)的IP地址变化了,肿么办? 在master机器中: /etc/mesos/zk进行编辑修改zk路径 ...

  7. Poj1012_Joseph

    一.Description The Joseph's problem is notoriously known. For those who are not familiar with the ori ...

  8. MySQL on Azure高可用性设计 DRBD - Corosync - Pacemaker - CRM (一)

    MySQL迁移到Azure上后,由于云的特性,在自建数据中心的MySQL的HA的方法在云上很多都不能部署. 这主要是因为,目前Public Cloud不支持:1. 共享存储:2. Multicast: ...

  9. 统计不同的单词(map应用)

    题目描述: 输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另一个单词.在判断是否满足条件时,字母不区分大小写,但在输出时应保留输入中的大小写,按字典序进行排列(所有 ...

  10. POJ百练—IP地址转换

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; ]; void ...