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

子集根其实就是这个数模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. vue组件的3种书写形式

    第一种使用script标签 <!DOCTYPE html> <html> <body> <div id="app"> <my- ...

  2. bzoj2958: 序列染色(DP)

    2958: 序列染色 题目:传送门 题解: 大难题啊(还是我太菜了) %一发大佬QTT 代码: #include<cstdio> #include<cstring> #incl ...

  3. First Day Python介绍

    前言:刚开通的博客,谢谢博客园平台,管理辛苦! Python介绍 Python是一门高级的.面向对象的.解释性.脚本语言. 高级语言:贴近开发者,对应底层语言,底层语言贴近机器:java.C#.php ...

  4. FileCopy文件复制

    package cn.com.filecopy; import java.io.FileInputStream; import java.io.FileNotFoundException; impor ...

  5. Python基本数据类型之数字int

    数字 int(x, base=None) 将x转换为一个整数.base为按照多少进制进行转换 float(x) 将x转换到一个浮点数. complex(x) 将x转换到一个复数,实数部分为 x,虚数部 ...

  6. A - A Compatible Pair

    Problem description Nian is a monster which lives deep in the oceans. Once a year, it shows up on th ...

  7. java三大版本解析

    JAVA三大版本代表着JAVA技术的三个应用领域:JAVASE.JAVAME.JAVAEE. JAVA以前很长一段时间被称为JAVA2,所以现在很多人习惯称为J2SE.J2ME.J2EE,它们表示的含 ...

  8. JS form 表单收集 数据 formSerialize

    做后台系统的时候通常会用到form表单来做数据采集:每次一个字段一个字段的去收集就会很麻烦,网站也有form.js插件可以进行表单收集,并封装成一个对象,通过ajax方法传到后台:现在介绍一种直觉采集 ...

  9. WPF下DataGrid的简单应用

    Dim dt As New DataTable() '------------------- dt.Columns.Add(New DataColumn("名称")) dt.Col ...

  10. 织梦dedecms红黑配图片模板源码v2.0

    dedecms红黑配风格美女图片站是采用dedecms程序搭建的图片网站源码,网站感觉很大气,简约但是不简单,适合做图片网站.网站模板是收集其他网站的模板,感谢原网站提供者.在安装过程中出现问题,现已 ...