HNOI 2016 乱做

 

4542: [Hnoi2016]大数

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 488  Solved: 182
[Submit][Status][Discuss]

Description

  小 B 有一个很大的数 S,长度达到了 N 位;这个数可以看成是一个串,它可能有前导 0,例如00009312345
。小B还有一个素数P。现在,小 B 提出了 M 个询问,每个询问求 S 的一个子串中有多少子串是 P 的倍数(0 也
是P 的倍数)。例如 S为0077时,其子串 007有6个子串:0,0,7,00,07,007;显然0077的子串007有6个子串都是素
数7的倍数。

Input

  第一行一个整数:P。第二行一个串:S。第三行一个整数:M。接下来M行,每行两个整数 fr,to,表示对S 的
子串S[fr…to]的一次询问。注意:S的最左端的数字的位置序号为 1;例如S为213567,则S[1]为 2,S[1…3]为 2
13。N,M<=100000,P为素数

Output

  输出M行,每行一个整数,第 i行是第 i个询问的答案。

Sample Input

11
121121
3
1 6
1 5
1 4

Sample Output

5
3
2
//第一个询问问的是整个串,满足条件的子串分别有:121121,2112,11,121,121。

HINT

2016.4.19新加数据一组

Source

挺可做的一道题,因为P为素数,所以预处理后缀和,答案就是l到r中后缀和相同的数,然后就用莫队搞一搞就行了,(2和5要特判,它只和末位相关)

  1 //start:   finish:
  2 #include<bits/stdc++.h>
  3 #define maxn 100005
  4 using namespace std;
  5 int P;
  6 int a[maxn];
  7 int b[maxn];
  8 long long c[maxn];
  9 int d[maxn];
 10 char s[maxn];
 11 int u[maxn];
 12 struct node
 13 {
 14     int x,y;
 15     int id;
 16     int kuai;
 17 }q[maxn];
 18 int m;
 19 int ge[maxn];
 20 bool cmp(node a,node b)
 21 {
 22     if(a.kuai!=b.kuai)return a.kuai<b.kuai;
 23     else return a.y<b.y;
 24 }
 25 long long res[maxn];
 26 int n;
 27 long long ans=0;
 28 void insert(int x)
 29 {
 30 //    cout<<x<<endl;
 31     ans+=ge[x];
 32     ge[x]++;
 33     //cout<<ans<<" "<<mp[x]<<endl;
 34 }
 35 void del(int x)
 36 {
 37     ge[x]--;
 38     ans-=ge[x];
 39 }
 40 void solve()
 41 {
 42     for(int i=1;i<=n;i++)
 43     {
 44         if((s[i]-‘0‘)%P==0)
 45         {
 46             c[i]=i;
 47             d[i]=1;
 48         }
 49     }
 50     for(int i=1;i<=n;i++)
 51     {
 52         c[i]=c[i-1]+c[i];
 53         d[i]=d[i-1]+d[i];
 54     }
 55     scanf("%d",&m);
 56     for(int i=1;i<=m;i++)
 57     {
 58         int l,r;
 59         scanf("%d%d",&l,&r);
 60         printf("%lld\n",c[r]-c[l-1]-1ll*(l-1)*(d[r]-d[l-1]));
 61     }
 62 }
 63 int main()
 64 {
 65     scanf("%d",&P);
 66     scanf("%s",s+1);
 67     n=strlen(s+1);
 68     if(P==2 || P==5)
 69     {
 70         solve();
 71         return 0;
 72     }
 73     scanf("%d",&m);
 74     for(int i=1;i<=m;i++)
 75     {
 76         scanf("%d%d",&q[i].x,&q[i].y);
 77         q[i].kuai=q[i].x/500;
 78         q[i].y++;
 79         q[i].id=i;
 80     }
 81     b[0]=1;
 82     for(int i=1;i<=n;i++)
 83     {
 84         b[i]=1ll*b[i-1]*10%P;
 85     }
 86     for(int i=n;i>=1;i--)
 87     {
 88         a[i]=(1ll*b[n-i]*(s[i]-‘0‘)%P+a[i+1])%P;
 89         u[i]=a[i];
 90     //    cout<<a[i]<<endl;
 91     }
 92     u[n+1]=0;
 93     sort(u+1,u+n+2);
 94     int cx=unique(u+1,u+n+2)-u-1;
 95     for(int i=1;i<=n+1;i++)
 96     {
 97         a[i]=lower_bound(u+1,u+cx+1,a[i])-u;
 98     }
 99     sort(q+1,q+m+1,cmp);
100     int l=1,r=0;
101     for(int i=1;i<=m;i++)
102     {
103     //    cout<<"fffff"<<endl;
104         //cout<<q[i].x<<" "<<q[i].y<<endl;
105         while(r<q[i].y)insert(a[++r]);
106         while(r>q[i].y)del(a[r--]);
107         while(l<q[i].x)del(a[l++]);
108         while(l>q[i].x)insert(a[--l]);
109         res[q[i].id]=ans;
110     }
111     for(int i=1;i<=m;i++)
112     printf("%lld\n",res[i]);
113     return 0;
114 }
115 /*
116 11
117 121121
118 3
119 1 6
120 1 5
121 1 4
122 */

时间: 2024-12-21 04:20:36

HNOI 2016 乱做的相关文章

2016年做个企业网站需要多少钱-邓海舟讲师

邓海舟网络营销讲师为您解答: 现在一般企业网站主要是用于展示和推广两种; 一.用于展示的主要是设计漂亮.企业网站基本功能齐全. 此类网站价格相对便宜.推荐使用定制网站.最低起价5500起.分别为5500元套餐,7800套餐,12000套餐,如果是刚刚成立的企业我们现有企业扶植样式最低只需5500元整套的企业整站. 二.用于营销推广,此类网站设计要符合网站所优化关键词用户群体的审美和习惯,框架优先考虑排名.此类网站优势在于网站不在是一个展示形象的窗口,更是一个营销渠道,客户可以定制关键词, 比如邓

2016年里做前端是怎样一种体验

问:最近我接手了一个新的Web项目,不过老实说我已经好久没碰过这方面的代码了.听说前端的技术栈已经发生了极大的变革,不知道你现在是不是仍然处于最前沿的开发者阵列? 答:准确来说,过去俗称的写网页的,现在应该叫做Front End Engineer,我确实属于这所谓的前端工程师.并且我才从JSConf与ReactConf面基回来,因此我觉得我觉得我还是了解目前Web前端领域最新的面貌的. 问:不错不错,我的需求其实也不复杂,就是从后端提供的REST风格的EndPoint来获取用户活动数据并且将其展

2016 年做前端开发是什么体验?混乱+开倒车,这是我的体验

有人说,你有什么资格发表这种高谈阔论,实际上是这样的,我在看 lol 比赛直播的时候,有个很有名的主播说过,打到 2400 以上的都去做职业玩家了, 1800-的还在挣扎,只有 2000 徘徊的才出来做主播,的却是这样,如果你是一个能力很强的程序员,你可以驾驭任何新技术.框架,那么你的牛逼可能掩盖一些真正的问题,但是有些人偏偏把问题说成 feature . 很多前端开发以鄙视 jQuery 为荣,以 jq-free 作为吹资,这是没问题的,因为如果你的目标是 IE9+,或者移动端, MVVM 框

USACO2013January(乱做)

由于不清楚来源,题目乱放: Problem 1: Mirrors [Brian Dean and Travis Hance, 2013] Farmer John's cows have been causing too much trouble around the farm, andFJ therefore wants to keep a more watchful eye on them.  By installing Nreflective fences (1 <= N <= 200)

HNOI 2016 省队集训日记

第一天 DeepDarkFantasy 从东京出发,不久便到一处驿站,写道:日暮里.  ——鲁迅<藤野先生> 定义一个置换的平方为对1~n的序列做两次该置换得到的序列.已知一个置换的平方,并且这个结果是一个排列,求该置换. 输入第一行一个数n表示排列长度,接下来一行n个数描述排列. 有解则输出一行n个数表示原排列.否则输出一行一个-1. 测试点编号 特征 0~1 n<=10 2~9 n<=1000000 此题有spj. 考试的时候懵逼了,根本没想清就开始乱打. 题解:由题易得每一个

论逗逼的自我修养——乱做计划

我看IOI各种鬼畜题目做做,深知自身姿势水平不足无以抗衡就乱搞一些傻逼题做做. 现在已经跪了0道 [BZOJ3749][POI2015]?asuchy 枚举第一个狗粮被谁吃了,后面的dp就可以了,记录下dp的路径,最后时候验证与假设是否矛盾即可. [BZOJ3750][POI2015]Piecz?? 暴力枚举左上角判断一下. [BZOJ3733][Pa2013]lloczyn 一开始用一个诡异的姿势WA了之后很久没能想出多项式做法,膜了一发鏼之后发现是大(d)法(f)师(s).我们从小到大枚举不

【BZOJ 4539】【HNOI 2016】树

http://www.lydsy.com/JudgeOnline/problem.php?id=4539 今天测试唯一会做的一道题. 按题目要求,如果暴力的把模板树往大树上仍,最后得到的大树是$O(n^2)$级别的,不能存储,更不能做了. 把模板树往大树上扔的过程我想象成了两个大节点进行连边,每个大节点代表模板树本身或一部分. 这相当于把初始的大树(此时和模板树相同)缩成一个大节点,每次把模板树的一部分缩成一个大节点往大节点构成的大树上连,最后连好的大节点构成的模板树是$O(n)$级别的. 每个

[HNOI 2016]序列

Description 题库链接 给你一个长度为 \(n\) 的序列 \(A\) ,给出 \(q\) 组询问.每次询问 \([l,r]\) ,求该区间内所有的子序列中最小值的和. \(1\leq n,q\leq 100000,|A_i|\leq 10^9\) Solution 考虑把右端点右移时,会产生 \(r-l+1\) 个新的区间,我们可以来统计这 \(r-l+1\) 个区间的最小值和. 记 \(pre_i\) 为从第 \(i\) 位往左走第一个值比 \(A_i\) 小的位置. 显然在 \(

Atcoder 乱做

最近感觉自己思维僵化,啥都不会做了-- ARC103 F Distance Sums 题意 给定第 \(i\) 个点到所有点的距离和 \(D_i\) ,要求构造一棵合法的树.满足第 \(i\) 个点到其他所有点的距离和为 \(D_i\) . \(n \le 10^5\) . 技巧 寻找特殊的量,推出整个树的形态 题解 整棵树里头,最为特殊的点有两类.一个是重心,这是距离和最小的点,另一个是叶子节点,这是距离和最大的节点.考虑如果我们先确定重心,那么接着就不大好往下推了,因为我们并不知道子树的大小