求某区间各个子集的和的根的最大的五个数。

子集根其实就是这个数模9后的余数,注意的是要区分0和9,两者的余数都是0。、

记录前i个数的和的根,设为sum数组,然后处理两个数组

lft[i][j]表示从i开始往右,最先sum出现根为j的位置。

rht[i][j]表示从i开始往左,最先sum开始出现根为j的位置。

处理一次询问,可以枚举状态,如枚举到j,当lft[i][j]<rht[i][j+k]成立时,则表明k这个根是存在的。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int MAX=101000; int number[MAX],zero[MAX],lft[MAX][11],rht[MAX][11];
int cnt[MAX];
int sum[MAX],cts;
int res[10]; int f(int m){
if(m==0) return 0;
else if((m%9)==0)
return 9;
else return (m%9);
} int main(){
int T,n,tmp,kase=0;
scanf("%d",&T);
while(T--){
printf("Case #%d:\n",++kase);
scanf("%d",&n);
sum[0]=zero[0]=0;
cnt[0]=0;
for(int i=1;i<=n;i++){
scanf("%d",&tmp);
sum[i]=f(sum[i-1]+tmp);
cnt[i]=tmp==0?cnt[i-1]:cnt[i-1]+1;
zero[i]=tmp==0?i:zero[i-1];
}
cnt[n+1]=cnt[n]+1;
for(int i=0;i<=9;i++)lft[n+1][i]=n+1,rht[0][i]=0;
for(int i=n;i>=0;i--){
for(int k=0;k<=9;k++){
if(sum[i]==k)
lft[i][k]=i;
else lft[i][k]=lft[i+1][k];
}
}
for(int i=1;i<=n;i++){
for(int k=0;k<=9;k++){
if(sum[i]==k)
rht[i][k]=i;
else rht[i][k]=rht[i-1][k];
}
}
int qy,x,y,a,b;
scanf("%d",&qy);
while(qy--){
scanf("%d%d",&x,&y);
memset(res,-1,sizeof(res));
for(int i=9,cts=5;i>0&&cts>0;i--){
int k;
for(k=0;k<=9;k++){
a=k;
b=a+i;
if(b>9) b-=9;
if(cnt[lft[x-1][a]]<cnt[rht[y][b]]) break;
}
if(k<=9) res[cts--]=i;
}
if(cts>0){
if(zero[y]>=x) res[cts--]=0;
}
printf("%d",res[5]);
for(int i=4;i>0;i--)
printf(" %d",res[i]);
printf("\n");
}
if(T>0)
printf("\n");
}
return 0;
}

  

HDU 4351的更多相关文章

  1. HDU 4351 Digital root 线段树区间合并

    依然不是十分理解……待考虑…… #include <cstdio> #include <cstring> #include <cstdlib> #include & ...

  2. ACM数据结构相关资料整理【未完成,待补充】

    在网上总是查不到很系统的练ACM需要学习的数据结构资料,于是参考看过的东西,自己整理了一份. 能力有限,欢迎大家指正补充. 分类主要参考<算法竞赛入门经典训练指南>(刘汝佳),山东大学数据 ...

  3. hdu 1542 线段树扫描(面积)

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  4. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  6. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  7. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  8. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  9. HDU 1796How many integers can you find(容斥原理)

    How many integers can you find Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d ...

随机推荐

  1. poj1179 区间dp(记忆化搜索写法)有巨坑!

    http://poj.org/problem?id=1179 Description Polygon is a game for one player that starts on a polygon ...

  2. luogu3942 将军令 贪心

    题目大意:给你一个地图(树),共有1~n个驿站(点),编号分别为1~n,告诉你第ui个驿站与第vi个驿站有一条长度为1的路(边),每个小队(可以放在任意驿站上)最多有k的覆盖长度,问最多要放置多少个小 ...

  3. php简单表格函数

    php简单表格函数 代码 <?php //ctrl+shift+j /** * @param unknown $rows * @param unknown $cols * @param stri ...

  4. Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

    安卓出现如下错误,需要增加FLAG_ACTIVITY_NEW_TASK标志 Intent intent1 = new Intent(getApplicationContext(), CameraAct ...

  5. 【POI 2007】 山峰和山谷

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1102 [算法] 广度优先搜索 [代码] #include<bits/stdc+ ...

  6. Javascript万物皆对象?

    在javascript的世界里,有这么一句话,万物皆对象. 但是这个对象,应该怎么理解呢? exm........??,难道值类型也是对象?!! 当然,不是. 准确地讲是对于“引用类型”而言. 那,在 ...

  7. 第一个"hello python!"

    第一个python程序"hello python!" 首先打开我们的编辑器,在安装好python后,直接在windows快捷方式里,输入IDLE,就可以看到我们的python默认自 ...

  8. [Offer收割]编程练习赛38

    漏写的数字 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #inclu ...

  9. Android图片剪裁库

    最近利用一周左右的业余时间,终于完成了一个Android图片剪裁库,核心功能是根据自己的理解实现的,部分代码参考了Android源码的图片剪裁应用.现在将该代码开源在Github上以供大家学习和使用, ...

  10. AS3.0 扑克牌乱序排列法洗牌

    package { /* *@ClassName:package::PokerMain *@Intro:这是一个初始化1-52扑克牌,然后进行乱序排列进行洗牌: *@Author:非若 *@Date: ...