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

子集根其实就是这个数模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. [.Net] 导出Excel中身份证等数字串的解决方式

    public static void DataTableToExcel(System.Data.DataTable dtData, String FileName) { GridView dgExpo ...

  2. 10-XML

    今日知识 1. xml * 概念 * 语法 * 解析 xml概念 1. 概念:Extensible Markup Language 可扩展标记语言 * 可扩展:标签都是自定义的. <user&g ...

  3. Nginx 配置埋点js日志采集

    页面埋点&nginx日志采集 页面(web容器:httpd/nginx负载均衡 + apache server)<===> 日志采集服务器(nginx服务器) 通过某个页面跳转到我 ...

  4. 查找DLL,并复制出来

    Subst b: %windir%\assembly 执行完后,会发现硬盘分区多了个B盘,打开后看到了所有assembly下的DLL,于是在这里就搜到了Microsoft.ReportViewer.P ...

  5. 第5章分布式系统模式 Broker(代理程序)

    许多复杂的软件系统运行在多个处理器或分布式计算机上.将软件分布在多台计算机上的原因有多种,例如: 分布式系统可以利用多个 CPU 或一群低成本计算机的计算能力. 某个软件可能仅在特定计算机上可用. 出 ...

  6. 关于PHP中的SESSION技术

    Session是服务器端技术,服务器在运行时可以为每一个用户创建一个其独享的session文件,所以用户在访问服务器web资源时,可以把各自的数据放在各自的session中,当用于再去访问该服务器中其 ...

  7. 【Oracle】闪回技术

    1.闪回技术描述 2.数据库的准备: --undo表空间要设置成AUTO,设置合适的保存时间.undo表空间: SYS@ENMOEDU> show parameter undo NAME TYP ...

  8. main函数解析

    原文链接:http://parisliu2008.blog.163.com/blog/static/95070867200951510412959/ main参数 2009-06-15 10:41:2 ...

  9. (转)基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts

    http://www.cnblogs.com/wuhuacong/p/3736564.html 在我们做各种应用的时候,我们可能都会使用到图表统计,以前接触过一些不同的图表控件,在无意中发现了图表控件 ...

  10. 文件系统VFS数据结构(超级块 inode dentry file)(收集整理)

    Linux虚拟文件系统四大对象: 1)超级块(super block) 2)索引节点(inode) 3)目录项(dentry) 4)文件对象(file) 一个进程在对一个文件进行操作时各种对象的引用过 ...