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所拥 ...
随机推荐
- 分享知识-快乐自己:MyBtis内置缓存机制
在实际的项目开发中,通常对数据库的查询性能要求很高,而mybatis提供了查询缓存来缓存数据,从而达到提高查询性能的要求. mybatis的查询缓存分为一级缓存和二级缓存,一级缓存是SqlSessio ...
- Hibernate学习---第七节:关联关系
一.关联关系一对一外键(双向) 1.实体类,代码如下: package learn.hibernate.bean; import java.util.Date; /** * 持久化类设计 * 注意: ...
- python中的生成器(generator)总结
1.实现generator的两种方式 python中的generator保存的是算法,真正需要计算出值的时候才会去往下计算出值.它是一种惰性计算(lazy evaluation). 要创建一个gene ...
- linux命令学习笔记(50):crontab命令
前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...
- 洛谷 P2777 [AHOI2016初中组]自行车比赛
题目描述 小雪非常关注自行车比赛,尤其是环滨湖自行车赛.一年一度的环滨湖自行车赛,需要选手们连续比赛数日,最终按照累计得分决出冠军.今年一共有 N 位参赛选手.每一天的比赛总会决出当日的排名,第一名的 ...
- Poj_1002_java解决
一.Description 电话号码的标准格式是七位十进制数,并在第三.第四位数字之间有一个连接符.电话拨号盘提供了从字母到数字的映射,映射关系如下: A, B, 和C 映射到 2 D, E, 和F ...
- POJ3126Prime Path(BFS)
#include"cstdio" #include"queue" #include"cstring" using namespace std ...
- Python:itertools库的使用
转于:https://blog.csdn.net/neweastsun/article/details/51965226 博主:neweastsun的专栏 介绍 itertools是python内置的 ...
- 微服务理论之四:SOA
1.什么是SOA? SOA代表了面向服务的架构. SOA是一种使用松耦合的黑盒子服务构建业务应用的体系架构,这些服务可以通过编排连接在一起以实现特定的功能. 2.SOA特点 以下是服务的SOA的主要特 ...
- 使用python对文件夹里面所有代码行数进行统计。
统计目录下所有的代码个数和总行数. # -*- coding: utf-8 -*- # @Author : ydf import json import os from pathlib import ...