USACO theme

  这道题的意思是给你一个长度不超过5000的串, 让你求解一个主题串, 其中主题串的定义是在这个串中重复出现过两次,没有重叠部分, 且两个串各减某个数后序列一样。。我们可以定义dp[i][j]为从i位置和j位置开始相同的串的长度, dp[i][j] = dp[i+1][j+1] + 1; 其中num[j+1]-num[i+1] = num[j]-num[i], 另外求出这个答案后还要记得判断是否重叠, 最后答案也要加1, 代码如下:

/*
    ID: m1500293
    LANG: C++
    PROG: theme
*/

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
int num[5000+10];
short dp[2][5010];   //dp[i][j]以i, j开始的最长相同子串

int main()
{
    freopen("theme.in", "r", stdin);
    freopen("theme.out", "w", stdout);
    int N;
    scanf("%d", &N);
    for(int i=1; i<=N; i++) scanf("%d", &num[i]);
    short res = 0;
    for(int i=N; i>=1; i--)
    {   memset(dp[i%2], 0, sizeof(dp[1]));
        for(int j=N; j>=1; j--)
        {

            if(j+1<=N && i+1<=N && num[j+1]-num[i+1]==num[j]-num[i]) dp[i%2][j] = dp[(i+1)%2][j+1] + 1;
            else dp[i%2][j] = 0;
            int x=j, y=j+dp[i%2][j]-1+1;
            if(!((i>=x&&i<=y)||(i+dp[i%2][j]-1+1>=x&&i+dp[i%2][j]-1+1<=y)))
                res = max(res, dp[i%2][j]);
        }
        //printf("\n");
    }

    if(res+1>=5) printf("%d\n", res+1);
    else printf("0\n");
    return 0;
}
时间: 2024-10-13 17:57:52

USACO theme的相关文章

COGS 696. [IOI1996][USACO 2.3] 最长前缀

★   输入文件:prefix.in   输出文件:prefix.out   简单对比时间限制:1 s   内存限制:128 MB 描述 USACO 2.3.1 IOI96 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣. 如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素.元素不一定要全部出现(如下例中B

Android的Style和Theme 译文

Style 是Window和View的一种外观和格式的属性集合.它可以作为高度,间距,字体大小,背景颜色等属性.Style是一种 xml 资源文件,放在和布局文件不同的文件夹里: Style 的设计理念和 Web一脉相承--即它们都允许你把内容和样式分离. 例如,你用Style可以把下面这个xml文件: <TextView android:layout_width="fill_parent" android:layout_height="wrap_content&quo

Linux mint cinnamon how to customize theme

Linux mint cinnamon       how to customize theme Linux mint have two style theme- system theme and user theme eg: system setting->themes like picture below: Void is user theme and the other is system theme,system theme can't be uninstalled. So the th

Notepad++ sublime text theme for C/C++

转自:https://coderwall.com/p/36x7uw 嗯,我决定还是把 整个文件贴出来,方便: 导入方法: 找到notepad++的目录,进入到themes里面. 建立一个:Waher-style.xml 然后把下面的内容copy进去.保存重启notepad++.然后在Settings 选择 Style Configurator. 在Select theme:里选择Waher-style. <?xml version="1.0" encoding="Win

USACO prefix TrieTree + DP

/* ID:kevin_s1 PROG:prefix LANG:C++ */ #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <vector> #include <map> #include <set> #include <algorithm> #include <cstdlib>

【USACO 1.3.4】牛式

[題目描述 ] 下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式. * * * x * * ---------- * * * * * * ---------- * * * * 数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0. 注意一下在美国的学校中教的"部分乘积",第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积. 写一个程序找出所有的牛式. [格式] INPUT FORMAT: (f

Android 5.x Theme 与 ToolBar 实战

1.概述 随着Material Design的逐渐的普及,业内也有很多具有分享精神的伙伴翻译了material design specification ,中文翻译地址:Material Design 中文版.So,我们也开始Android 5.x相关的blog,那么首先了解的当然是其主题的风格以及app bar. 当然,5.x普及可能还需要一段时间,所以我们还是尽可能的去使用兼容包支持低版本的设备. ps:本博客使用: compileSdkVersion 22 buildToolsVersio

USACO Chapter 1 Section 1.1

USACO的题解和翻译已经很多了... 我只是把自己刷的代码保存一下. 1.PROB Your Ride Is Here 1 /* 2 ID:xiekeyi1 3 PROG:ride 4 LANG:C++ 5 */ 6 7 #include<bits/stdc++.h> 8 using namespace std ; 9 10 int main() 11 { 12 freopen("ride.in","r",stdin); 13 freopen(&quo

poj1743 Musical Theme

地址:http://poj.org/problem?id=1743 题目: Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 28675   Accepted: 9674 Description A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the range