大概看了两三个小时的题解,思考量很大,实现简单........

20分:

明显看出,每个点的贡献是x*(x-1)/2;即组合数C(x,2),从x个线段中选出2个的方案数,显然每次相交贡献为1,n^2枚举相交即可....

40分:

对于四十分,观察图像发现是实际就是求逆序对.....

 1 #include<iostream>
2 #include<cstdio>
3 #include<cmath>
4 #include<cstring>
5 #include<algorithm>
6 #include<set>
7 #include<map>
8 #include<queue>
9 #define int long long
10 #define MAXN 101001
11 using namespace std;
12 struct node{int x,id;}e[MAXN];
13 int c[MAXN];int N,A,MOD;
14 int lowbit(int x){return x&(-x);}
15 void add(int x)
16 {
17 for(int i=x;i<=N;i+=lowbit(i))
18 {
19 c[i]++;
20 }
21 }
22 int find(int x)
23 {
24 int ans=0;
25 for(int i=x;i>=1;i-=lowbit(i))
26 {
27 ans+=c[i];
28 }
29 return ans;
30 }
31 bool cmp(node a,node b)
32 {
33 return (a.x!=b.x)?a.x<b.x:a.id<b.id;
34 }
35 signed main()
36 {
37 scanf("%lld%lld%lld%lld",&N,&e[1].x,&A,&MOD);e[1].id=1;
38 for(int i=2;i<=N;++i)
39 {
40 e[i].x=(e[i-1].x+A)%MOD;
41 e[i].id=i;
42 }
43 for(int i=1;i<=N;++i)e[i].x++;
44 sort(e+1,e+N+1,cmp);
45 int anss=0;
46 for(int i=1;i<=N;++i)
47 {
48 anss+=find(N)-find(e[i].id);
49 //printf("i=%lld id=%lld anss=%lld\n",i,e[i].id,anss);
50 add(e[i].id);
51 }
52 printf("%lld\n",anss);
53 }

40分

部分分:

考虑a==x[1]

我们发现图像的一些性质

在x[i]的不断后移中,假设当x[j]时>MOD,

我们发现x[i]-x[j]是一段以a为公差的序列

为了避免枚举n,我们从a入手

因为公差的原因,将序列分成若干个长度为a的段,其实每次经过的点都是一定的

当x<a时

我们直接求解 此时的ans=(i-1)-ask(now)now为当前值,非常明显,因为i-1是所有在它之前出现的数,ask(now)为不符合的....

之后

发现一个小性质,每次后移减少的值是一定的,即ask(a)

然后递推....

100 分:

在上述部分加入x[1]>a的情况

因为每次减的都是ask(a),但这是第一段在1-a中不存在,我们若是按上述方法求,在枚举中不会将

第一段不符合的值减去,那么......我们发现当枚举第二段时(一段就是长度大于mod后重新开始)

当此时长度now大于初始值时,需要减去1,因为这个1无法在ask(1)中得出啦啦啦....

 1 #include<iostream>
2 #include<cstdio>
3 #include<cmath>
4 #include<cstring>
5 #include<algorithm>
6 #include<set>
7 #include<map>
8 #include<queue>
9 #define int long long
10 #define MAXN 101001
11 using namespace std;
12 int x;
13 int c[MAXN];int N,A,MOD;
14 int lowbit(int x){return x&(-x);}
15 void add(int x)
16 {
17 for(int i=x;i<=A+1;i+=lowbit(i))
18 {
19 c[i]++;
20 }
21 }
22 int find(int x)
23 {
24 int ans=0;
25 for(int i=x;i>=1;i-=lowbit(i))
26 {
27 ans+=c[i];
28 }
29 return ans;
30 }
31 signed main()
32 {
33 scanf("%lld%lld%lld%lld",&N,&x,&A,&MOD);
34 int anss=0;
35 int last=x;
36 int now=(x+A)%MOD;
37 int cas=0;
38 int now_fir=x;//printf("now_fir=%lld\n",now_fir);
39 int k=0;
40 for(int i=2;i<=N;++i)
41 {
42 //printf("i=%lld now=%lld last=%lld\n",i,now,last);
43 if(now<A)
44 {
45 if(now_fir<=A)
46 {
47 add(now_fir+1);
48 }
49 now_fir=now;
50 k++;
51 // printf("add last=%lld %lld\n",i,now_fir);
52 anss+=(i-1)-find(now+1);
53 cas=(i-1)-find(now+1);
54 }
55 else
56 {
57 cas-=find(A+1);
58 if(now>=x&&x>A&&k>=1)cas--;
59 anss+=cas;
60 }
61 //printf("anss=%lld\n",anss);
62 last=now;
63 now=(now+A)%MOD;
64 }
65 printf("%lld\n",anss);
66 }

飞(fly)(数学推导,liu_runda的神题)的更多相关文章

  1. 【BZOJ4173】数学 欧拉函数神题

    [BZOJ4173]数学 Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N ...

  2. 【模拟7.27】题(liu_runda的神题)(卡特兰数,组合数)

    考场的SB经验不再分享 case 0: 一道组合计数的水题,具体不再讲可以看以前的相似题 case 1: 很明显的卡特兰计数,我们把长度为n的序列看成01串 关于卡特兰计数的详细的讲解 由此可知我们需 ...

  3. Codeforces Round #499 (Div. 2) C.FLY 数学推导_逆推

    本题应该是可以使用实数二分的,不过笔者一直未调出来,而且发现了一种更为优美的解法,那就是逆推. 首先,不难猜到在最优解中当飞船回到 111 号节点时油量一定为 000, 这就意味着减少的油量等于减少之 ...

  4. 「模拟8.13」任(liu_runda的神题,性质分析)

    考场时没有发现性质,用了个前缀和优化暴力,结果写WA了 我们发现其实联通块的个数就是点的个数-边的个数 然后我们需要维护横向上和纵向上的边的前缀和 前缀和的查询形式稍改一下 暴力 1 #include ...

  5. UVA - 10014 - Simple calculations (经典的数学推导题!!)

    UVA - 10014 Simple calculations Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...

  6. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 128[Submit][Status ...

  7. [hdu5307] He is Flying [FFT+数学推导]

    题面 传送门 思路 看到这道题,我的第一想法是前缀和瞎搞,说不定能$O\left(n\right)$? 事实证明我的确是瞎扯...... 题目中的提示 这道题的数据中告诉了我们: $sum\left( ...

  8. ZOJ3329(数学推导+期望递推)

    要点: 1.期望的套路,要求n以上的期望,则设dp[i]为i分距离终点的期望步数,则终点dp值为0,答案是dp[0]. 2.此题主要在于数学推导,一方面是要写出dp[i] = 什么,虽然一大串但是思维 ...

  9. [国家集训队]整数的lqp拆分 数学推导 打表找规律

    题解: 考场上靠打表找规律切的题,不过严谨的数学推导才是本题精妙所在:求:$\sum\prod_{i=1}^{m}F_{a{i}}$ 设 $f(i)$ 为 $N=i$ 时的答案,$F_{i}$ 为斐波 ...

随机推荐

  1. 腾讯暑期 前后七面 + hr(已拿offer面经)

    以下是时间线 魔方 魔术师工作室 3.19 一面(120mins) c++ struct和union区别? 指针和引用的区别? 左值和右值? 字节对齐的作用? 什么情况下需要自定义new? mallo ...

  2. Java并发-线程池篇-附场景分析

    作者:汤圆 个人博客:javalover.cc 前言 前面我们在创建线程时,都是直接new Thread(): 这样短期来看是没有问题的,但是一旦业务量增长,线程数过多,就有可能导致内存异常OOM,C ...

  3. UI设计师、平面设计师常用的网站大全,初学者必备,大家都在用!

    UI设计师.平面设计师常用的网站大全,初学者必备,大家都在用! 国外的花瓣--Pinterest • The world's catalog of ideas 颜格视觉--app界面设计大全--电商. ...

  4. Mac 搭建 Sentry

    Sentry 为我们提供应用程序的错误跟踪,使我们能够快速定位到错误所在的文件和行号. 以下是官网支持语言和框架的部分截图: 准备工作 自 2020 年 12 月 4 日起,Sentry 默认使用 P ...

  5. log日志重复输出问题(没弄明白原因)

    在别的模块调用定义好的函数 输出的日志出现第一次输出输出一条,第二次输出输出两条...的情况 最后在定义函数处remove了句柄 引用了https://blog.csdn.net/huilan_sam ...

  6. 【转载】一次「Too many open files」故障

    一次「Too many open files」故障 发表于2015-08-02 昨天,项目的 ElasticSearch 服务挂了,我说的挂可不是进程没了,因为有 Supervisor 保护,而是服务 ...

  7. nvm、nrm、npm 安装和使用详解

    一.nvm的安装和使用   nvm全称Node Version Manager是 Nodejs 版本管理器,它让我们能方便的对 Nodejs 的版 本进行切换. nvm 的官方版本只支持 Linux ...

  8. 11.14 mii-tool:管理网络接口的状态

    mii-tool命令用于查看.管理网络接口,默认情况下网卡的状态是自动协商的,但是有时也会出现不正常的情况,可以使用mii-tool进行调整. mii-tool [option] [interface ...

  9. ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)

    @ 目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 本教程<ArcGIS从入门到精通系列实验教程>内容包括:ArcGIS平台简介.ArcGIS应用基础.空间数据的采集 ...

  10. 标准Gitlab命令行操作指导

    gitlab是一个分布式的版本仓库,总比只是一个本地手动好些,上传你的本地代码后后还能web GUI操作,何乐不为? 贴上刚刚搭建的gitlab,看看git 如何操作标准命令行操作指导 1.命令行操作 ...