A本来想改到q<1e5,让你们预处理的,然后想了哈作为个逆元模板题吧= =,做不出来自行反思。

B贴个题面

因为只有一次机会,那么也就是两点分布期望E = p了,先说说大家的做法,先求出每个n的逆元保存,然后因为最大只会取到1e6,所以对0-1e6跑一遍每个数的倍数个数。复杂度O(N1/3),代码如下

 #include <iostream>
using namespace std;
typedef long long ll;
const int maxn = ;
ll sum[maxn+];
ll sqr3(ll n){
int l=,r=maxn+;
while(l+<r){
ll mid = (l+r)>>;
if(mid*mid*mid>n)
r=mid;
else l=mid;
}
return l;
}
void exgcd(const ll a, const ll b, ll &g, ll &x, ll &y) {
if (!b) g = a, x = , y = ;
else exgcd(b, a % b, g, y, x), y -= x * (a / b);
} ll inv(const ll num,const ll MOD) {
ll g, x, y;
exgcd(num, MOD, g, x, y);
return ((x % MOD) + MOD) % MOD;
}
ll fast_mult(ll x,ll y,ll mod) {
ll tmp=(x*y-(ll)((long double)x/mod*y+1.0e-8)*mod);
return tmp< ? tmp+mod : tmp;
}
int main() {
for(ll i=;i<=maxn;i++){
sum[i]=sum[i-]+((i+)*(i+)*(i+)-)/i-(i*i*i-)/i;
}
int T;
cin>>T;
while(T--){
ll n,mod;
cin>>n>>mod;
ll temp=sqr3(n);
ll ans=sum[temp-]+n/temp-(temp*temp*temp-)/temp;
ans=fast_mult(ans%mod,inv(n,mod)%mod,mod);
cout<<ans<<endl;
}
return ;
}

然后我的做法是

这里对每一步做一个解释 = =,大佬可以略过,[S]代表艾弗森约定,就是S为真则值为1,否则值为0。

对于第一个等号,就是求这些赢点的个数和。

对于第二个等号,用x来代表k的立方根的底。

对于第三个等号,第一个艾弗森约定应该不难理解,底肯定会小于等于原值。

对于第四个等号,这里第一个和式是处理边界,这里x=N的立方根的底(写错了,懒得重新改了)。这部就是把边界单独处理了。

对于第五个等号,讨论y的取值。

对于第六个等号,换底,然后是对y求和.

后面的同上,讨论取值求和。

最后就可以求得一个公式,因为要求立方根的底,建议用牛顿迭代求解。

最终的复杂度就是O(QlogN)。代码如下

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int q;
ll n,Mod,w;
double newton(double x){
double x1, x2;
if (x == 0.0) return 0.0;
x1 = x;
x2 = (2.0 * x1 + x / (x1 * x1)) / 3.0;
while (fabs((x2 - x1) / x1) >= 1E-) {
x1 = x2;
x2 = (2.0 * x1 + x / (x1 * x1)) / 3.0;
}
return x2;
} void extgcd(ll a,ll b,ll& x,ll& y){
if(!b){
x = ;
y = ;
return ;
}
extgcd(b,a%b,y,x);
y -= x*(a/b);
} ll inverse(ll a,ll n){
ll x,y;
extgcd(a,n,x,y);
return (x+n)%n;
} ll qmul(ll a,ll b) {
ll ans = ;
while (b) {
if (b&) {
ans = (ans+a)%Mod;
}
a = (a+a)%Mod;
b >>= ;
}
return ans;
} void solve() {
cin >> n >> Mod;
ll k = newton(n);
ll w = n/k - ;
if (k&) {
w += k*k/ + *k/ + ;
} else {
w += k/*k + k/*;
}
//cout << k << ' ' << w << endl;
ll ans = qmul(w%Mod,inverse(n,Mod));
cout << ans << endl;
} int main() {
ios_base::sync_with_stdio();
cin >> q;
while (q--) {
solve();
}
return ;
}

太伤心了= =,被离线算法吊打。

FJUT2019暑假周赛三部分题解的更多相关文章

  1. FJUT2019暑假周赛一题解

    A.排队问题*-* 题意就是有长度为L的序列,每位的取值可以是'f'或者'm',问不包含'fff'和'fmf'的个数. 打表找规律 不难找出递推公式为F[n] = F[n-1] + F[n-3] + ...

  2. SICP第三章题解

    目录 SICP第三章题解 ex3-17 ex3-18 ex3-19 队列 ex3-21 ex3-22 ex3-24 ex3-25 3.4 并发:时间是一个本质问题 ex3-38 3.4.2 控制并发的 ...

  3. Codeforces Round #524 (Div. 2)(前三题题解)

    这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...

  4. Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)

    这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...

  5. FJUT2019暑假第二次周赛题解

    A 服务器维护 题目大意: 给出时间段[S,E],这段时间需要人维护服务器,给出n个小时间段[ai,bi],代表每个人会维护的时间段,每个人维护这段时间有一个花费,现在问题就是维护服务器[S,E]这段 ...

  6. 暑假训练round 3 题解

    今天做题运气出奇的好,除了几处小错误调试之后忘记改掉了……最后还AK了……虽然题目不难,学长也说是福利局,但是对个人的鼓励作用还是挺大的……至此暑假训练就结束了,也算没有遗憾……. 题解如下: Pro ...

  7. NOIP 2008提高组第三题题解by rLq

    啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...

  8. BestCoder Round #86 二,三题题解(尺取法)

    第一题太水,跳过了. NanoApe Loves Sequence题目描述:退役狗 NanoApe 滚回去学文化课啦! 在数学课上,NanoApe 心痒痒又玩起了数列.他在纸上随便写了一个长度为 nn ...

  9. HDU 6787 Chess 2020百度之星 初赛三 T5 题解 dp

    传送门:HDU 6787 Chess Problem Description 你现在有一个棋盘,上面有 n 个格子,格子从左往右,1,-,n 进行标号.你可以在棋盘上放置恰好 m 个传送器,并且对于每 ...

随机推荐

  1. linux安装MySQL后输入mysql显示 ERROR 2002 (HY000): Can't connect to local MySQL server through socket

    我是小白,大佬勿喷 *** linux安装MySQL后输入mysql显示 ERROR 2002 (HY000): Can't connect to local MySQL server through ...

  2. 使用base64编码把背景添加到CSS文件中

    最近博客背景图片的外链挂了,没办法,只好另找办法. 在博客园后台,有一个“文件”菜单,可以上传自己的文件,我就打算把图片传到里面.但却发现了一个很反人性的设置:不允许上传jpg,png文件,允许上传的 ...

  3. Python-demo(listen)

    import requests import json # 爬虫原理 模拟浏览器 获取请求数据 #点击播放连接 #url = "https://www.ximalaya.com/revisi ...

  4. SQL奇技淫巧(01):给查出的数据排序编个号【row_number() over(order by c)】(mysql,db2,oracle,sqlserver通用)

    我们天天都在跟数据库打交道,写下的代码不计其数,写下的SQL更是可以绕地球几圈.这里收集关于SQL的神奇语法及用法,虽然你可能没有用过,但这些SQL却可以在关键的时候,派上用场. 我对SQL语句的理解 ...

  5. Codeforces 337D

    题意略. 思路: 本题着重考察树的直径.如果我们将这些标记点相连,将会得到大树中的一个子树.我之前只知道树内的点到直径上两端点的距离是最远的,其实,在 整个大树中,这个性质同样适用,也即大树上任意一点 ...

  6. Java多线程之Runnable与Thread

    Java多线程之Thread与Runnable 一.Thread VS Runnable 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类和 ...

  7. eslint语法规范

    规则 缩进使用两个空格. eslint: indent   function hello (name) {   console.log('hi', name)   } 1 2 3 字符串使用单引号,除 ...

  8. 导航页的开发--手机web app开发笔记

    好了,的所有的基础知识已经准备完毕了,现在开始制作引导页.这个引导页需要一个HTML文件,JS文件,一个CSS文件.在HBuilderX中根目录下添加“Guid.html”,在JS文件夹添加“myth ...

  9. Java Builder 模式,你搞明白了么?

    Builder 模式定义 Builder 模式中文叫作建造者模式,又叫生成器模式,它属于对象创建型模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式是一步一步 ...

  10. JDK8的JVM内存结构,元空间替代永久代成为方法区及常量池的变化

    JVM的知识这里总结的很详细:https://github.com/doocs/jvm/blob/master/README.md,因此在本博客也不会再对其中的东西重复总结了. 现在很多文章关于JVM ...