UVA 11739 Giving Candies
求最大的公共前缀;
用后缀数组做;
其实暴力也可以过;
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 2009
using namespace std; int s[maxn];
int sa[maxn],t[maxn],t2[maxn],c[maxn],n; void build_sa(int m)
{
int *x=t,*y=t2;
for(int i=; i<m; i++)c[i]=;
for(int i=; i<n; i++)c[x[i]=s[i]]++;
for(int i=; i<m; i++)c[i]+=c[i-];
for(int i=n-; i>=; i--)sa[--c[x[i]]]=i;
for(int k=; k<=n; k<<=)
{
int p=;
for(int i=n-k; i<n; i++)y[p++]=i;
for(int i=; i<n; i++)if(sa[i]>=k)y[p++]=sa[i]-k;
for(int i=; i<m; i++)c[i]=;
for(int i=; i<n; i++)c[x[y[i]]]++;
for(int i=; i<m; i++)c[i]+=c[i-];
for(int i=n-; i>=; i--)sa[--c[x[y[i]]]]=y[i];
swap(x,y);
p=;
x[sa[]]=;
for(int i=; i<n; i++)
x[sa[i]]=y[sa[i-]]==y[sa[i]]&&y[sa[i-]+k]==y[sa[i]+k]?p-:p++;
if(p>=n)break;
m=p;
}
} int rank[maxn],height[maxn];
void getheight()
{
int k=;
for(int i=; i<n; i++)rank[sa[i]]=i;
for(int i=; i<n; i++)
{
if(k)k--;
int j=sa[rank[i]-];
while(s[i+k]==s[j+k])k++;
height[rank[i]]=k;
}
} bool check(int mid)
{
int mi=,ma=-;
for(int i=; i<n; i++)
{
if(height[i]>=mid)
{
mi=min(mi,sa[i]);
ma=max(ma,sa[i]);
}
else
{
if(ma-mi>=mid)return ;
mi=ma=sa[i];
}
}
if(ma-mi>=mid)return ;
return ;
} bool isbad[];
char bad[],good[];
int main()
{
int tt,r,ca=;
scanf("%d",&tt);
getchar();
while(tt--)
{
memset(isbad,,sizeof isbad);
gets(good);
gets(bad);
int l=strlen(bad);
for(int i=; bad[i]!='\0'; i++)
isbad[bad[i]]=;
n=strlen(good);
while(n>&&good[n-]==' ')
{
good[n-]='\0';
--n;
}
int xx='z';
for(int i=; good[i]!='\0'; i++)
{
if(isbad[good[i]])s[i]=xx++;
else s[i]=good[i];
}
s[n]=;
if (n<=)
{
printf("Case #%d: 0\n",ca++);
continue;
}
n++;
build_sa(xx+);
getheight();
l=,r=n>>;
while(l<=r)
{
int mid=(l+r)>>;
if(check(mid))l=mid+;
else r=mid-;
}
printf("Case #%d: %d\n",ca++,r);
}
return ;
}
UVA 11739 Giving Candies的更多相关文章
- UVA - 10118 Free Candies 记忆化搜索经典
思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...
- UVA 10118 Free Candies
https://vjudge.net/problem/UVA-10118 题目 桌上有4堆糖果,每堆有$N$($N\leqslant 40$)颗.有个熊孩子拿了个可以装5颗糖的篮子,开始玩无聊的装糖游 ...
- UVa 10118 Free Candies (记忆化搜索+哈希)
题意:有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果,如果篮子里有两个相同的糖果, 那么就可以把这两个(一对)糖果放进自己的口袋里,问最多能拿走 ...
- UVA - 10118 Free Candies(免费糖果)(dp---记忆化搜索)
题意:桌上有4堆糖果,每堆有N(N<=40)颗.佳佳有一个最多可以装5颗糖的小篮子.他每次选择一堆糖果,把最顶上的一颗拿到篮子里.如果篮子里有两颗颜色相同的糖果,佳佳就把它们从篮子里拿出来放到自 ...
- [LeetCode] Candy 分糖果问题
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- 6 Candy_Leetcode
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- Leetcode Candy
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- leetcode bugfree note
463. Island Perimeterhttps://leetcode.com/problems/island-perimeter/就是逐一遍历所有的cell,用分离的cell总的的边数减去重叠的 ...
- LeetCode 135 Candy(贪心算法)
135. Candy There are N children standing in a line. Each child is assigned a rating value. You are g ...
随机推荐
- gwt-问题解决
最近在看gwt,写了个demo,但是总是出问题,困扰了好几天,后台也没报错,但就是加载不出来 第一次编译以后是可以的,但是改了代码后就不行了,后台也没报错,google了好长时间也没出来. 于是换了个 ...
- 20160611-20160714springmvc入门进阶
springmvc第二阶段 高级知识 复习: springmvc框架: DispatcherServlet前端控制器:接收request,进行response HandlerMapping处理器映射器 ...
- 安装oracle 12c遇到问题
安装前步骤:更改用户账户控制设置:从不通知 出现 "SEVERE: [FATAL] [INS-30014] 无法检查指定的位置是否位于 CFS 上" 解决办法:重新设置hosts ...
- asp.net 邮件发送类
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- JavaScript中事件绑定的方法总结
最近收集了一些关于JavaScript绑定事件的方法,汇总了一下,不全面,但是,希望便于以后自己查看. JavaScript中绑定事件的方法主要有三种: 1 在DOM元素中直接绑定 2 JavaScr ...
- javascript 事件 第23节
<html> <head> <title>DOM对象</title> <style type="text/css"> t ...
- Java获取方法参数名、Spring SpEL解析
@Test public void testParse() { //表达式解析 ExpressionParser expressionParser = new SpelExpressionParser ...
- Java语言----三种循环语句的区别
------- android培训.java培训.期待与您交流! ---------- 第一种:for循环 循环结构for语句的格式: for(初始化表达式;条件表达式;循环后的操作表达式 ...
- 6.5 k个已排好序链表合并为一个排序链表
1 建立链表(带哨兵位的)2 建立最小堆方法3 合并已排好序的k个链表 typedef int DataType; //建立链表 class Link { private: struct Node { ...
- 程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]
作者:何海涛 出处:http://zhedahht.blog.163.com/ 题目:定义Fibonacci数列如下: / 0 n=0 f(n)= ...