hdu 4455 Substrings(找规律&DP)
Substrings
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1161 Accepted Submission(s): 351
The distinct elements’ number of those five substrings are 2,3,3,2,2.
So the sum of the distinct elements’ number should be 2+3+3+2+2 = 12
Each test case starts with a positive integer n, the array length. The next line consists of n integers a
1,a
2…a
n, representing the elements of the array.
Then there is a line with an integer Q, the number of queries. At last Q lines follow, each contains one integer w, the substring length of query. The input data ends with n = 0 For all cases, 0<w<=n<=10
6, 0<=Q<=10
4, 0<= a
1,a
2…a
n <=10
6
1 1 2 3 4 4 5
3
1
2
3
0
10
12
题意:
给你一个数组{a1,a2,a3........an}。然后定义了一个询问。给你一个w。要你求出。所有a[i+1],a[i+2]......a[i+w]。中不同元素个数的和。i+w<=n。
思路:
dp[i]表示w为i时的答案。我们考虑dp[i+1]即长度增加一个后的情况。
对于n=3时。dp[3]已知
[1 1 2 ]3 4 4 5
对于n=4时。
[1 1 2 3] 4 4 5
相当于在以前三元集中加入一个数。所以如果该元素出现过dp[4]的值和dp[3]值一样。
如果不一样就要在dp[3]的基础上减一个。但是对于数组的最后三个数已经不能算作dp[4]的值。但dp[3]把它们
算作在内。所以要把他们减出来。我们对于数组中的每一个数。维护一个数组pre[v]表示数值v上次出现的位置。那么i-pre[v]即两数的不重复区间长度。
哎。。。比赛时居然为一个__int64卡了半天。还是不专业呀。都没有分析数据范围。。。还是最后十分钟做出来的。
不然应该有机会做做其它题目的。
详细见代码:
#include <iostream>
#include<string.h>
#include<stdio.h> using namespace std;
const int maxn=1000010;
int a[maxn],pre[maxn],len[maxn];
__int64 dp[maxn],rest;//注意数据范围呀!!
bool vis[maxn];
int main()
{
int n,q,w,i; while(scanf("%d",&n),n)
{
memset(pre,-1,sizeof pre);
memset(len,0,sizeof len);
memset(vis,0,sizeof vis);
for(i=0;i<n;i++)
{
scanf("%d",a+i);
len[i-pre[a[i]]]++;//统计各长度的数目
pre[a[i]]=i;
}
for(i=n-1;i>=0;i--)
len[i]+=len[i+1];//len[i]代表长度大于等于i的个数
dp[0]=0;
dp[1]=n;
rest=1;
vis[a[n-1]]=true;
for(i=2;i<=n;i++)
{
dp[i]=dp[i-1]+len[i]-rest;//rest为长度不足i的部分
if(!vis[a[n-i]])
{
rest++;
vis[a[n-i]]=true;
}
}
scanf("%d",&q);
while(q--)
{
scanf("%d",&w);
printf("%I64d\n",dp[w]);
}
}
return 0;
}
hdu 4455 Substrings(找规律&DP)的更多相关文章
- hdu 4455 Substrings(计数)
题目链接:hdu 4455 Substrings 题目大意:给出n,然后是n个数a[1] ~ a[n], 然后是q次询问,每次询问给出w, 将数列a[i]分成若干个连续且元素数量为w的集合,计算每个集 ...
- HDU 2086 A1 = ? (找规律推导公式 + 水题)(Java版)
Equations 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2086 ——每天在线,欢迎留言谈论. 题目大意: 有如下方程:Ai = (Ai-1 ...
- hdu 5047 大数找规律
http://acm.hdu.edu.cn/showproblem.php?pid=5047 找规律 信kuangbin,能AC #include <stdio.h> #include & ...
- Tetrahedron(Codeforces Round #113 (Div. 2) + 打表找规律 + dp计数)
题目链接: https://codeforces.com/contest/166/problem/E 题目: 题意: 给你一个三菱锥,初始时你在D点,然后你每次可以往相邻的顶点移动,问你第n步回到D点 ...
- hdu 4455 Substrings (DP 预处理思路)
Substrings Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 4455 Substrings[多重dp]
Substrings Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 4455 Substrings ( DP好题 )
这个……真心看不出来是个DP,我在树状数组的康庄大道上欢快的奔跑了一下午……看了题解才发现错的有多离谱. 参考:http://www.cnblogs.com/kuangbin/archive/2012 ...
- HDU 4455.Substrings
Substrings Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU - 4455 Substrings(非原创)
XXX has an array of length n. XXX wants to know that, for a given w, what is the sum of the distinct ...
随机推荐
- CLR via C# 阅读笔记
1.char在C#中为16位Unicode字符:int 映射到System.Int32;long映射到System.Int64. 2.重载时C#不考虑返回值,而CLR允许返回值不同,方法名和参数相同的 ...
- SharePoint2010 Form验证配置流程
1.修改管理中心的Web.config文件,位置:C:\inetpub\wwwroot\wss\VirtualDirectories\42903 2.修改应用程序的Web.config文件,位置:C: ...
- oracle update语句的几点写法
update两表关联的写法包括字查询 1.update t2 set parentid=(select ownerid from t1 where t1.id=t2.id); 2. update tb ...
- OC弱语法
OC是在运行过程中才会检测对象有没有实现相应的方法,所有编译过程只给出警告:可能找不到对应方法: 如果程序在运行过程中出错,就会出现程序闪退: 类方法:类可以直接调用的方法,相当于java中的 ...
- BOOST CHRONO steadycolock::now分析
一直觉得boost的时间库不是很好用,当然,也有可能是我没有深入理解,所以,把代码弄出来看看或许要好些,时间处理中,取当前时间真的是太常见,而boost中各种clock又区分不清楚,然而,代码能说明一 ...
- js操作cookie,js判断浏览器属性,
在默认情况下,只有设置cookie的网页才能读取该cookie.如果想让一个页面读取另一个页面设置的cookie,必须设置cookie的路径. http://www.jb51.net/article/ ...
- 21个值得收藏的Javascript技巧
1 Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如 ...
- Swift 基本数据类型
Swift 1,Swift支持所有C和Objective-C的基本类型,支持面向过程和面向对象的编程机制. 2,Swift提供了两种功能强劲的集合类型:数组和字典. 3,元组. 4,可选类型. 5,S ...
- Microsoft.AlphaImageLoader滤镜讲--透明处理<转>
Microsoft.AlphaImageLoader是IE滤镜的一种,其主要作用就是对图片进行透明处理.虽然FireFox和IE7以上的IE浏览器已经支持透明的PNG图片,但是就IE5-IE6而言还是 ...
- redis的内部实现机制
一 理论基础 redis