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所拥 ...
随机推荐
- BAT系列(一)— CNN
1.CNN最成功的应用是在CV 那为什么NLP和Speech的很多问题也可以用CNN解出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性? 以 ...
- HDU - 5934
tarjan 视频讲解 /** * 题目链接:https://vjudge.net/problem/HDU-5934 * 题意:给你n个炸弹,引爆每个炸弹会有一定的花费.每个炸弹给出坐标x,y,半径r ...
- 利用perlin noise 生成 wood texture
%%% Perlin Noise %%% Wood_texture clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image P ...
- noip模拟赛 #3
T1 给一个环,每个点有一个权值,把环分成三段,求最小的那段的最大值 sol:暴力 二分答案,chk就是把环搞成三倍链,每次枚举起点,后面三个切割点都可以二分找 然后就Rua过去了 //yyc wen ...
- mysql绿色安装
先下载需要的文件: MySQL5.1(绿色).rar 和 MySQL-Front_v5.3(绿色版).rar 都是绿色免安装版 1.解压MySQL Server 5.1.rar到MySQL Serve ...
- 一次spark卡顿分析
在104上面执行,经常会发生卡到了如下一句话: storage.BlockManagerInfo: Added broadcast_8_piece0 当再次卡顿的时候,我直接退出,然后通过yarn看后 ...
- bzoj 2039 & 洛谷 P1791 人员雇佣 —— 二元关系最小割
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2039 https://www.luogu.org/problemnew/show/P1791 ...
- MySQL复制--最快的从库搭建方法(tar包) -转
最快的从库搭建方法0,准备从库第一次数据备份,临时锁所有表开启窗口1 mysql> flush tables with read lock; Query OK, 0 rows affected ...
- 简单的RBAC用户角色权限控制
Java web项目中,无论项目是大是小,或多或少都会涉及到用户访问权限的控制,权限管理总体的设计思路就是,不该看的不看,不该做的不做!据我目前的了解,我所知道的几种实现访问权限控制的方式有: JQu ...
- java代码GUI简单的。。。
总结:觉得 package com.da; import java.awt.*; //逆向思维:important //创建一个String对象的数组,然后执行读取文本,把文本每一行存入数组,它将读取 ...