UVA 11916 Emoogle Grid 离散对数 大步小步算法
LRJ白书上的题
#include <stdio.h>
#include <iostream>
#include <vector>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#include <string.h>
#include <string>
using namespace std;
typedef long long LL;
const LL mod=1e8+;
const int N=; LL n,m,k,b,r,x[N],y[N];
set<pair<LL,LL> >bset;
void exgcd(LL a,LL b,LL& d,LL &x,LL &y){
if(!b){d=a;x=;y=;}
else {exgcd(b,a%b,d,y,x);y-=x*(a/b);}
}
LL pow_mod(LL a,LL p){
LL ans=;
while(p){
if(p&)ans=(ans*a)%mod;
p/=;
a=(a*a)%mod;
}
return ans;
}
LL inv(LL a){
LL d,x,y;
exgcd(a,mod,d,x,y);
return d==?(x+mod)%mod:-;
}
LL log_mod(LL a,LL b){
LL tmp,v,e=;
tmp=(LL)sqrt(mod+0.5);
v=inv(pow_mod(a,tmp));
map<LL,LL>mp;
mp.clear();
mp[]=;
for(LL i=;i<tmp;++i){
e=(e*a)%mod;
if(!mp.count(e))mp[e]=i;
}
for(LL i=;i<tmp;++i){
if(mp.count(b))return i*tmp+mp[b];
b=(b*v)%mod;
}
return -;
}
LL count(){
LL c=;
for(LL i=;i<b;++i)
if(x[i]!=m&&!bset.count(make_pair(x[i]+,y[i])))++c;
c+=n;
for(LL i=;i<b;++i)if(x[i]==)--c;
return pow_mod(k,c)*pow_mod((k-),n*m-b-c)%mod;
}
LL solve(){
LL cnt=count();
if(cnt==r)return m;
LL c=;
for(LL i=;i<b;++i)if(x[i]==m)++c;
++m;
cnt=(cnt*pow_mod(k,c))%mod;
cnt=(cnt*pow_mod(k-,n-c))%mod;
if(cnt==r)return m;
return log_mod(pow_mod(k-,n),(r*inv(cnt))%mod)+m;
}
int main()
{
int T;
scanf("%d",&T);
for(int t=;t<=T;++t){
scanf("%lld%lld%lld%lld",&n,&k,&b,&r);
bset.clear();
m=;
for(LL i=;i<b;++i){
scanf("%lld%lld",&x[i],&y[i]);
m=max(m,x[i]);
bset.insert(make_pair(x[i],y[i]));
}
printf("Case %d: %lld\n",t,solve());
}
return ;
}
UVA 11916 Emoogle Grid 离散对数 大步小步算法的更多相关文章
- 离散对数&&大步小步算法及扩展
bsgs algorithm ax≡b(mod n) 大步小步算法,这个算法有一定的局限性,只有当gcd(a,m)=1时才可以用 原理 此处讨论n为素数的时候. ax≡b(mod n)(n为素数) 由 ...
- 【题解】Matrix BZOJ 4128 矩阵求逆 离散对数 大步小步算法
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 大水题一道 使用大步小步算法,把数字的运算换成矩阵的运算就好了 矩阵求逆?这么基础的线 ...
- uva 11916 Emoogle Grid (BSGS)
UVA 11916 BSGS的一道简单题,不过中间卡了一下没有及时取模,其他这里的100000007是素数,所以不用加上拓展就能做了. 代码如下: #include <cstdio> #i ...
- UVA - 11916 Emoogle Grid (组合计数+离散对数)
假如有这样一道题目:要给一个M行N列的网格涂上K种颜色,其中有B个格子不用涂色,其他每个格子涂一种颜色,同一列中的上下两个相邻格子不能涂相同颜色.给出M,N,K和B个格子的位置,求出涂色方案总数除以1 ...
- UVA 11916 Emoogle Grid(同余模)
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- uva 11916 Emoogle Grid
题意:用K种颜色给一个N*M的格子涂色.其中有B个格子是不能涂色的.涂色时满足同一列上下紧邻的两个格子的颜色不同.所有的涂色方案模100000007后为R.现在给出M.K.B.R,求一个最小的N,满足 ...
- 离散对数及其拓展 大步小步算法 BSGS
离散对数及其拓展 离散对数是在群Zp∗Z_{p}^{*}Zp∗而言的,其中ppp是素数.即在在群Zp∗Z_{p}^{*}Zp∗内,aaa是生成元,求关于xxx的方程ax=ba^x=bax=b的解, ...
- [模板]大步小步算法——BSGS算法
大步小步算法用于解决:已知A, B, C,求X使得 A^x = B (mod C) 成立. 我们令x = im - j | m = ceil(sqrt(C)), i = [1, m], j = [0, ...
- [uva11916] Emoogle Grid (离散对数)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Emoogle Grid You have to color an MxN ( ...
随机推荐
- C#获取运行程序的进程ID
C#获取运行程序的进程ID [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int G ...
- 三种读写XML的方法
XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内 ...
- javascript调用外部wpf的方法
今天因为项目需要在wpf嵌入web页面,然后在web页面调用wpf的方法,于是突击学习了一下,记下备忘.^_^ 1.wpf中新建一个类WpfForScriptingHelper namespace w ...
- java Object类
常用的共性内容 1,实现任何对象的比较,一般比较同一种对象的比较 Object1.equals(Object obj);等同于Object1 == obj: 只有当两个引用指向同一个对象时方法返回tr ...
- websphere6.1安装与配置
http://www.blogjava.net/103335460/articles/220935.html 一.本人开发环境: jdk1.5.0_11 , eclipse3.2 , MyEclips ...
- 4、Hbase
1).逻辑模型 Hbase 以表的形式存储数据,每个表由行和列组成,每个列属于一个特定的列族. 表中由行和列确定的存储单元称为一个元素,每个元素保存了同一份数据的多个版本,由时间戳来标识.行健是数据行 ...
- ibdata1是?
MySQL使用InnoDB引擎的时候,ibdata1这个文件会随着时间的增长,会变得越来越大,占据大量的磁盘空间. 那么,ibdata1里保存了哪些东西,为什么会变得越来越大呢,让我们开看看ibdat ...
- 一步步学习ASP.NET MVC3 (15)——过滤器
请注明转载地址:http://www.cnblogs.com/arhat 今天老魏和大家一起讨论一下ASP.NET MVC中非常重要的一个知识:"过滤器".那么这个"过滤 ...
- word-wrap同word-break的区别(转)
本文列举了兼容 IE 和 FF 的换行 CSS 推荐样式,详细介绍了word-wrap同word-break的区别. 兼容 IE 和 FF 的换行 CSS 推荐样式 最好的方式是 word-wrap: ...
- Android中数据库Sqlite的性能优化
1.索引简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率.(1). 优点大大加快了数据库检索的速度,包括 ...