HDU 4351
求某区间各个子集的和的根的最大的五个数。
子集根其实就是这个数模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的更多相关文章
- HDU 4351 Digital root 线段树区间合并
依然不是十分理解……待考虑…… #include <cstdio> #include <cstring> #include <cstdlib> #include & ...
- ACM数据结构相关资料整理【未完成,待补充】
在网上总是查不到很系统的练ACM需要学习的数据结构资料,于是参考看过的东西,自己整理了一份. 能力有限,欢迎大家指正补充. 分类主要参考<算法竞赛入门经典训练指南>(刘汝佳),山东大学数据 ...
- hdu 1542 线段树扫描(面积)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
随机推荐
- HDU4300-Clairewd’s message-KMP
题目链接:pid=4300">http://acm.hdu.edu.cn/showproblem.php?pid=4300 题目意思真的非常难读懂. 题意:给定两组字符串,第一组仅仅有 ...
- 一步一步跟我学习lucene(18)---lucene索引时join和查询时join使用演示样例
了解sql的朋友都知道,我们在查询的时候能够採用join查询,即对有一定关联关系的对象进行联合查询来对多维的数据进行整理.这个联合查询的方式挺方便的.跟我们现实生活中的托人找关系类似,我们想要完毕一件 ...
- 什么是URL?网址的组成
欢迎加入前端交流群交流知识&&获取视频资料:749539640 和 Hypertext 以及 HTTP 一样,URL是Web中的一个核心概念.它是浏览器用来检索web上公布的任何资源的 ...
- [HTML] 微信开发之移动手机WEB页面(HTML5)Javascript实现一键拨号及短信发送功能
在做一个微信的微网站中的一个便民服务电话功能的应用,用到移动web页面中列出的电话号码,点击需要实现调用通讯录,网页一键拨号的拨打电话功能. 如果需要在移动浏览器中实现拨打电话,发送email,美国服 ...
- HTTP请求与请求头
HTTP 的请求报文分为三个部分 请求行.请求头和请求体,格式如图:一个典型的请求消息头域,如下所示: POST/GET http://download.microtool.de:80/somedat ...
- BZOJ 4032 trie树+各种乱搞
思路 : 先对b 的所有后缀建立trie树 第一问 暴力枚举a串的起点 在trie树上跑 找到最短的 第二问 也是暴力枚举a串的起点 a和b顺着暴力匹配就好 第三问 求出来a在第i个位置 加一个字母j ...
- Codeforces Round #198 (Div. 2)A,B题解
Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...
- B - Letter(最小覆盖矩形)
Problem description A boy Bob likes to draw. Not long ago he bought a rectangular graph (checked) sh ...
- Solr.NET快速入门(二)
字典映射和动态字段 Solr dynamicFields可以根据用例不同地映射. 它们可以被"静态地"映射,例如,给定: <dynamicField name="p ...
- WordPress音乐主题Always1.8
WordPress响应式主题 音乐主题个人博客杂志主题Always主题V1.8 Always主题V1.8是以Ajax加以CSS动画的方式,很好的将优雅的设计感和极度精简的代码同时表现了出来,进而缔造出 ...