指挥使走后一脸懵逼,然后想起了一道水\(SB\)的省选题。

这是毒瘤乘法分配率的应用,似乎还有一篇,算是入门题。

对了,这题连接:P2220 [HAOI2012]容易题

然而蒟蒻还是先自闭了一会......

大力代值可知,是一道裸的条件概率。

先处理出\(sum=\sum_{i=1}^{n}\)与\(sum^n\)(这是用分配率推导的,我这里不用了,就是无限制条件下的最大值),在处理每个被影响的区块就好了,就是乘上

\[\dfrac{{sum-\sum_{i=\text{被限制的数}}i}}{sum}
\]

这里被限制的数只有\(k\in[1,1e5]\)个,暴力一下即可,注意要排序和去重!!

那么这样的复杂度就是\(O(k\log k)\)的,可以通过本题。


我下面说个问题,其实此题已解决了,不过......

显然要求出\(sum\)在模\(1e9+7\)意义下的逆元,那么这个数一定存在吗?

即求:

\[(1e9+7)k=\dfrac{n(n+1)}{2}\;\;\;k\in Z
\]

是否在数据范围内存在正整数解\(k\)。

显然\(1e9+7\)是质数,那么\(n\)和\(n+1\)一个中显然有因子\(1e9+7\),而且另一个数是偶数,那么易得\(n_{min}=1e9+7>1e9\),是没问题的。

下面上代码了:

\(Code\):

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int MAXN=100005;
const int MOD=1000000007;
typedef long long ll;
inline long long mul(long long x,long long y,long long mod)
{
long long tmp=(x*y-(long long)((long double)x/mod*y+1.0e-8)*mod);
return tmp<0 ? tmp+mod : tmp;
}//数据不小,加上保险
struct node
{
ll id,val;
}a[MAXN],b[MAXN];
bool cmp(node n,node m){if(n.id^m.id) return n.id<m.id;else return n.val<m.val;}
ll n,m,k,cnt=0;
ll sum,inv,s;
ll quickpow(ll a,ll b)
{
ll base=a%MOD,ans=1;
while(b)
{
if(b&1) ans=mul(ans,base,MOD);
b>>=1;
base=mul(base,base,MOD);
}
return ans%MOD;
}
ll get_inv(ll x){return quickpow(x,1000000005)%MOD;}
void hack()//真坑~去重
{
for(int i=1;i<=k;i++)
{
if(a[i].id==b[cnt].id&&a[i].val==b[cnt].val) continue;
else b[++cnt]=a[i];
}
}
void work()
{
sum=n*(n+1)/2;
sort(a+1,a+k+1,cmp);
hack();
inv=get_inv(sum)%MOD;
s=quickpow(sum,m);
int l=0;
ll now=sum;
for(int i=1;i<=cnt;i++)
{
if(b[i].id==b[l].id) now-=b[i].val;
else
{
s=mul(s,mul(inv,now,MOD),MOD)%MOD;
now=sum-b[i].val;
l=i;
}
}
s=mul(s,mul(inv,now,MOD),MOD)%MOD;//最后还剩下一组
return;
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&k);
//正确思路挂成70pts,原因:
//n,m还要是long long否则后边求sum时得到的还是int
for(int i=1;i<=k;i++) scanf("%lld%lld",&a[i].id,&a[i].val);
work();
cout<<s%MOD<<"\n";
return 0;
}

解题报告:luogu P2220的更多相关文章

  1. 【解题报告】洛谷 P2571 [SCOI2010]传送带

    [解题报告]洛谷 P2571 [SCOI2010]传送带今天无聊,很久没有做过题目了,但是又不想做什么太难的题目,所以就用洛谷随机跳题,跳到了一道题目,感觉好像不是太难. [CSDN链接](https ...

  2. NOIP 2018 普及组 解题报告

    目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...

  3. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  4. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  5. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  6. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  7. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  8. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  9. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  10. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

随机推荐

  1. Fluent_Python_Part1序幕,01-data-model, 数据模型

    01-data-model/frenchdeck.py 1. Python解释器碰到特殊的句法时,会使用__特殊方法__去激活一些基本的对象操作. 特殊方法的存在是为了被解释器用的.没有my_obje ...

  2. Tiny-shell

    Tiny-shell:一个模仿bash的极简shell (一) 概述 通过构建一个简单的shell,能够对shell的工作原理进行一些了解.主要有: 重定向 流水线 前台信号处理 进程组 后台进程 作 ...

  3. List(数组)里面常用的属性和方法

    常用属性: length 长度 reversed 翻转 isEmpty 是否为空 isNotEmpty 是否不为空常用方法: add 增加 addAll 拼接数组 增加多个数据 list.addAll ...

  4. Git基础及进阶-系统总结

    Git基础及进阶-系统总结 by 小强 2019-07-01 考虑到入职后不仅需要熟练掌握git的基本使用,在企业实际操作中还涉及一些进阶指令.作为一个程序员,熟练使用工具是一项基本技能,也是程序员的 ...

  5. python之requests库使用

    requests库 虽然Python的标准库中 urllib模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests宣传是 “HTTP for Human ...

  6. set的使用-Hdu 2094

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. Linux - Shell后台、前台,运行命令

    后台运行(终端能操纵) 只需要在后面加& gedit & 查看正在运行的jobs jobs 放到前台运行(终端不能操作) fg % fg %1 一个终端一个context.一个终端就是 ...

  8. C++11特性中的to_string

    写在最前面,本文摘录于柳神笔记 to_string 的头⽂件是 #include , to_string 最常⽤的就是把⼀个 int 型变量或者⼀个数字转化 为 string 类型的变量,当然也可以转 ...

  9. 【PAT甲级】1064 Complete Binary Search Tree (30 分)

    题意:输入一个正整数N(<=1000),接着输入N个非负整数(<=2000),输出完全二叉树的层次遍历. AAAAAccepted code: #define HAVE_STRUCT_TI ...

  10. iOS 使用 Xcode8 制作动态库及静态库

    在使用第三方 SDK 时,经常遇到他们提供的仅仅只有一个动态或静态库,并不能获取源码.使用动态库 FrameWork 或 静态库 Lib,可以满足不想把核心代码的具体实现向使用者展示,又能避免其他人错 ...