51nod1989 竞赛表格
1989 竞赛表格
定义rev(i)为i十进制下各位翻转所得的数,例如rev(2345)=5432,rev(3210)=123。
l0nl1f3比较无聊,他打算用rev函数进行一个游戏。
他找了一个无穷大的表格,设第i行第j列的格子上的数为f(i,j),那么ff满足
l0nl1f3想要知道这个表格中[L,R]之间的数出现了多少次,mod P输出。
由于他有时候会改变主意,所以他可能会询问q次,每次的L、R、P可能不同。
由于输入较慢,建议使用输入优化,这里提供一份C++的输入优化(标程就使用这个输入优化):
char ch,B[1<<20],*S=B,*T=B;
#define getc() (S==T&&(T=(S=B)+fread(B,1,1<<20,stdin),S==T)?0:*S++)
#define isd(c) (c>='0'&&c<='9')
ll aa;ll F(){ //positive only.while(ch=getc(),!isd(ch));aa=ch-'0';while(ch=getc(),isd(ch))aa=aa*10+ch-'0';return aa;
}
由于输出较慢,你只需要将每个询问的答案异或后输出。
样例解释:
第一个询问,数字表格前13行、前4列如下:
1 2 4 8
2 4 8 16
3 6 12 33
4 8 16 77
5 10 11 22
6 12 33 66
7 14 55 110
8 16 77 154
9 18 99 198
10 11 22 44
11 22 44 88
12 33 66 132
13 44 88 176
可以发现其中有9个10~13的数,9 mod 7=2,所以该询问答案为2。
四个询问的答案分别为:2 159 147 1825,2 xor 159 xor 147 xor 1825=1839,所以输出1839。
输入
第一行一个整数q,表示询问次数。( 1≤q≤10^5)
第二行开始q行每行三个整数L、R、P。(1≤L≤R≤10^10,1≤P≤10^9)
输出
一行一个整数,为每个询问的答案的异或和。
输入样例
4
10 13 7
2333 233333 233
6666 666666 666
1234 567890 2333
输出样例
1839
解析:
例如一个数x=abcde,rev(x)为edcba,那么x+rev(x)=10001(a+e)+1010(b+d)+200c。
那么可以发现a+e、b+d都是[0,18]的一个整数,c是[0,9]的整数。
那么我们可以考虑枚举x的位数和a+e、b+d、c这样的数,dfs一波,进而求出x+rev(x)可能取到的每个数,同时计算取到每个x+rev(x)的x的个数,全部记下来sort就好。
这样的复杂度大约是19^(len/2)*len的,可以求出250w左右个可能的数,记这个集合为S。
记f[i]为i在表格中的出现次数,g[i]为j+rev(j)=i的j个数,那么 ,所以 。
显然只有g[i]>0的数f[i]才大于1,那么我们只要从小到大枚举S中的每个数p,每次让 , 即可。
求出S集合中所有f值之后只要前缀和一下,每次询问求和一下,再加上不在集合S中的数的个数即可。
放代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
char ch,B[1<<20],*S=B,*T=B;
#define getc() (S==T&&(T=(S=B)+fread(B,1,1<<20,stdin),S==T)?0:*S++)
#define isd(c) (c>='0'&&c<='9')
ll aa;ll F(){ while(ch=getc(),!isd(ch));aa=ch-'0';while(ch=getc(),isd(ch))aa=aa*10+ch-'0';return aa;
}
ll psb[3200000],sb[3200000],pw[20],psum[3200000],sum[3200000];
int c[3200000];
void dfs(int now,int lim,ll had,ll ways){if(had > pw[10]) return;if(now == (lim+1)/2){psb[++psb[0]] = had , c[psb[0]] = psb[0] , psum[psb[0]] = ways;return;}if(!now){if(pw[now] == pw[lim-now-1]){for(int i=1;i<=9;i++)dfs(now+1,lim,had+2*i*pw[now],ways);}else{for(int i=1;i<=18;i++)dfs(now+1,lim,had+i*(pw[now]+pw[lim-1-now]),ways*(i<=9?i:9-(i-10)));}}else{if(pw[now] == pw[lim-now-1]){for(int i=0;i<=9;i++)dfs(now+1,lim,had+2*i*pw[now],ways);}else{for(int i=0;i<=18;i++)dfs(now+1,lim,had+i*(pw[now]+pw[lim-1-now]),ways*(i<=9?i+1:9-(i-10)));}}
}
ll rev(ll x){ll ret=0;for(;x;) ret=ret*10+x%10,x/=10;return ret;
}
bool cmp(const int &u,const int &v){ return psb[u] < psb[v]; }
int main(){pw[0] = 1;for(int i=1;i<=10;i++) pw[i] = pw[i-1] * 10;for(int i=1;i<=10;i++) dfs(0,i,0,1);sort(c+1,c+1+psb[0],cmp);for(int i=1;i<=psb[0]+1;i++)if(psb[c[i]] == psb[c[i-1]])psum[c[i]] += psum[c[i-1]];else if(i>1)sb[++sb[0]] = psb[c[i-1]] , sum[sb[0]] = psum[c[i-1]];for(int i=1;i<=sb[0];i++){sum[lower_bound(sb+1,sb+1+sb[0],sb[i]+rev(sb[i]))-sb] += sum[i];sum[i] += sum[i-1];}int q=F(),ans=0;ll l,r,p;for(;q--;){l=F(),r=F(),p=F();int ret = (sum[upper_bound(sb+1,sb+1+sb[0],r)-sb-1] - sum[upper_bound(sb+1,sb+1+sb[0],l-1)-sb-1] + r - l + 1) % p;ans ^= ret;}printf("%d\n",ans);return 0;
}
51nod1989 竞赛表格相关推荐
- jvm虚拟机规范 紧接上文的
dneg dneg指令是类型安全的,if在传入的操作数堆栈中有一个类型匹配的双倍数.dneg指令不改变类型状态. instructionIsTypeSafe(dneg, Environment, _O ...
- 第十六届全国大学生智能汽车竞赛 车模技术检查表格与技术文件
简 介: 本文给出了参加第十六届全国大学生智能汽车竞赛队伍所需要提交的技术文档要求. 关键词: 智能车竞赛,技术文档 §01 前言 全国大学生智能汽车竞赛要求参赛选手在竞赛规则指定的通用车模和单片 ...
- 第十五届全国大学生智能车竞赛车模技术检查表格
第十五届全国大学生智能车竞赛 车模技术检查表格 <车模技术检查表格>EXCEL表格可以在竞赛网站( 第十五届/秘书处 )下载: 作者:卓晴博士 全国大学生智能车竞赛秘书处 2020-07- ...
- ICDAR 2021竞赛 科学文献分析——表格识别综述部分(剩余部分是文档布局分析)
任务B为表格识别部分,本文暂只看表格识别 摘要(不重要,想直接看表格识别部分可以跳过). 科学文献包含与不同领域的前沿创新有关的重要信息.自然语言处理的进步推动了科学文献信息自动提取的快速发展.然而, ...
- TPAMI 2021 | 深度赋智AutoDL系列竞赛世界冠军方案首次公开
导读:「深度赋智」斩获NeurIPS-AutoDL 2019系列竞赛总决赛世界冠军,在图像/音频/视频/文本/表格不同场景的十个数据集上稳定获得八项第一和均分第一.为共同推动AutoDL技术的快速发展 ...
- 学术圈竞赛圈大讨论,深度学习真的比不过GBDT模型吗?
Why Are Deep Learning Models Not Consistently Winning Recommender Systems Competitions Yet?(RecSys20 ...
- 中科大倪茹:感谢开源,我从入门竞赛到Top 10的经验分享
个人介绍 给大家介绍下自己吧,个人信息.个人社交(github.知乎.csdn)地址.个人经历.竞赛经历 大家好鸭,我叫倪茹,是中国科学技术大学控制工程专业研二学生,Coggle小组成员,研究方向是人 ...
- 爱可可推荐!关于竞赛思路,方法和代码实践,Datawhale数据竞赛Baseline开源分享!...
数据竞赛中baseline是最入门的分享, 它不仅有思路.方法还有内容: 或许你与Top选手的差距就是一个baseline! 01 项目介绍 如果你是数据竞赛的初学者.爱好者,比赛的baseline不 ...
- 我,14岁初中生,从零开始拿到了Kaggle竞赛冠军
视学算法报道 机器之心编辑部 因为对数学感兴趣,勇敢的少年决定投身 Kaggle. 知乎上有这样一个问题已经收到了超过 700 条回答. 在这之下有人冷嘲热讽,有人给出了鼓励和建议.从人们回答的时间来 ...
最新文章
- 如何用JNI技术提高Java的性能详解
- Linux用户root登录shell时,linux系统管理-定制root用户的Shell环境
- HTTP Error 503. The service is unavailable.
- 对互联网用户分类的思考
- 对CAS机制的理解(二)
- Linux卸载搜狐,双系统删除教程详解:Windows(linux)双系统,教你如何删除其中一个!...
- access转换成oracle,Access转Oracle工具
- wireshrk中的名词说明
- php Function split() is deprecated 的解决办法(转)
- 去掉IntelliJ IDEA 中 mybatis 对应的 xml 文件警告
- JavaScript四大家族之scroll家族
- 图片资源加载路径分析以及netbeans打包java程序,并包含图片资源
- [文章摘录] Is Cloud Computing Really Ready for Prime Time (Computer, 2009)
- [已解决]datetime.date is coerced to a datetime. In the future pandas will not coerce, and ‘the values
- 基于单片机的打地鼠游戏仿真设计(#0040)
- 文件服务器索引服务,ftp服务器文件索引
- Oracle数据库查询语句去重,Oracle数据库之SQL---select查询
- spring缓存注解@Cacheable和@CacheEvict,设置过期时间和批量模糊删除
- 【24】搭建FCN语义分割网络完成自己数据库图像分割(1)
- SAP凭证的类别和记账码