hud 4455 Substrings 解题报告
生活随笔
收集整理的這篇文章主要介紹了
hud 4455 Substrings 解题报告
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:給你一個序列 , 然后給你q個詢問t,問這個序列中t個連續(xù)的子集中不同元素個數(shù)的和;
解題思路:http://www.cnblogs.com/kuangbin/archive/2012/11/11/2765329.html
解題代碼:
// File Name: c.c // Author: darkdream // Created Time: 2013年05月31日 星期五 18時14分34秒 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #include<math.h> int a[1000010]; int c[1000010]; int b[1000010]; int f[1000010]; long long dp[1000010]; int main(){//freopen("/home/plac/problem/input.txt","r",stdin);//freopen("/home/plac/problem/output.txt","w",stdout);int n ;while(scanf("%d",&n) != EOF,n){ memset(dp,0,sizeof(dp));memset(a,0,sizeof(a));memset(c,0,sizeof(c));memset(b,0,sizeof(b));memset(f,0,sizeof(f));for(int i = 1;i <= n;i ++){ scanf("%d",&a[i]);c[i-f[a[i]]] ++;f[a[i]] = i ;}memset(f,0,sizeof(f));b[1] = 1;f[a[n]] = 1;for(int i = 2;i <= n;i ++){if(f[a[n-i+1]] == 0){f[a[n-i+1]] = 1;b[i] = b[i-1]+1;}else b[i] = b[i-1];}dp[1] = n;int sum = n;for(int i = 2 ; i <= n; i ++){dp[i] = dp[i-1] - b[i-1];sum-= c[i-1];dp[i]+= sum;}int q; scanf("%d",&q);while(q--){int temp;scanf("%d",&temp);printf("%I64d\n",dp[temp]) ;}}return 0 ; } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/zyue/archive/2013/06/01/3111769.html
總結(jié)
以上是生活随笔為你收集整理的hud 4455 Substrings 解题报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF学习一--概述
- 下一篇: NYOJ-523 亡命逃窜(三维立体的B