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. Apache配置负载均衡-实例

    公司两台服务器都安装了tomcat,配置apache作为负载均衡,当一台服务器出现故障时还能保证业务正常运行. Server1:192.168.1.100 Server2:192.168.1.200 ...

  2. OpenCV——旋转模糊 (二)

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  3. 【leetcode刷题笔记】Path Sum

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

  4. hdu Digital Square(广搜)

    题目:给出n,求出最小的m,满足m^2  % 10^k = n,其中k=0,1,2 http://acm.hdu.edu.cn/showproblem.php?pid=4394 只要有一个x满足条件便 ...

  5. dubbo monitor simple 监控原理分析

    监控机制: 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心.监控中心负责统计各服务调用次数,调用时间等. 监控元数据存储目录结构: --dubbo.jetty ...

  6. HDOJ2043(JAVAset容器练习)

    import java.io.PrintWriter; import java.util.HashSet; import java.util.Scanner; public class Main { ...

  7. 【转】 Pro Android学习笔记(七六):服务(1):local和remote

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Android提供服务,服务是运行在后台的 ...

  8. python并发编程之多进程1互斥锁与进程间的通信

    一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...

  9. Redis IRedisTypedClient

    IRedisTypedClient IRedisTypedClient类相当于IRedicClient的强类型版,其方法与属性大多数与IRedisClient类似. 它支持在Redis中使用Linq查 ...

  10. AVI编码器

    AVI编码器,AVI英文全称为Audio Video Interleaved,即音频视频交错格式.就是编码语音和影像同步组合在一起的文件格式.它对视频文件采用了一种有损压缩方式,但压缩比较高,因此尽管 ...