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 离散对数 大步小步算法的更多相关文章

  1. 离散对数&&大步小步算法及扩展

    bsgs algorithm ax≡b(mod n) 大步小步算法,这个算法有一定的局限性,只有当gcd(a,m)=1时才可以用 原理 此处讨论n为素数的时候. ax≡b(mod n)(n为素数) 由 ...

  2. 【题解】Matrix BZOJ 4128 矩阵求逆 离散对数 大步小步算法

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 大水题一道 使用大步小步算法,把数字的运算换成矩阵的运算就好了 矩阵求逆?这么基础的线 ...

  3. uva 11916 Emoogle Grid (BSGS)

    UVA 11916 BSGS的一道简单题,不过中间卡了一下没有及时取模,其他这里的100000007是素数,所以不用加上拓展就能做了. 代码如下: #include <cstdio> #i ...

  4. UVA - 11916 Emoogle Grid (组合计数+离散对数)

    假如有这样一道题目:要给一个M行N列的网格涂上K种颜色,其中有B个格子不用涂色,其他每个格子涂一种颜色,同一列中的上下两个相邻格子不能涂相同颜色.给出M,N,K和B个格子的位置,求出涂色方案总数除以1 ...

  5. UVA 11916 Emoogle Grid(同余模)

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. uva 11916 Emoogle Grid

    题意:用K种颜色给一个N*M的格子涂色.其中有B个格子是不能涂色的.涂色时满足同一列上下紧邻的两个格子的颜色不同.所有的涂色方案模100000007后为R.现在给出M.K.B.R,求一个最小的N,满足 ...

  7. 离散对数及其拓展 大步小步算法 BSGS

    离散对数及其拓展 离散对数是在群Zp∗Z_{p}^{*}Zp∗​而言的,其中ppp是素数.即在在群Zp∗Z_{p}^{*}Zp∗​内,aaa是生成元,求关于xxx的方程ax=ba^x=bax=b的解, ...

  8. [模板]大步小步算法——BSGS算法

    大步小步算法用于解决:已知A, B, C,求X使得 A^x = B (mod C) 成立. 我们令x = im - j | m = ceil(sqrt(C)), i = [1, m], j = [0, ...

  9. [uva11916] Emoogle Grid (离散对数)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud  Emoogle Grid  You have to color an MxN ( ...

随机推荐

  1. hdu 5009 Paint Pearls

    首先把具有相同颜色的点缩成一个点,即数据离散化. 然后使用dp[i]表示涂满前i个点的最小代价.对于第i+1个点,有两种情况: 1)自己单独涂,即dp[i+1] = dp[i] + 1 2)从第k个节 ...

  2. linux shell编程学习笔记(一)---通配符,元字符

    linux通配符: 通配符是由shell处理的(不是由所涉及到命令语句处理的,其实我们在shell各个命令中也没有发现有这些通配符介绍), 它只会出现在 命令的“参数”里(它不用在 命令名称里, 也不 ...

  3. js搜索框 js仿百度搜索 js下拉框 jQuery.Autocomplete使用

    做了一个网站,需要根据文本框的输入模糊搜索数据库内容给出提示供用户选择,就找到了jQuery.Autocomplete 效果如下图: 该插件托管在github上,具体地址:https://github ...

  4. Linux C 程序 输入输出函数(THREE)

    标准输入输出函数#include<stdio.h>stdio 是 standard input & output 的缩写 字符数据输入输出函数: putchar() , getch ...

  5. html+ashx 缓存问题

    最近采用html+ashx的方式做了一个项目的几个配置页面的功能,由于浏览器的缓存问题,每次更新数据提交后,页面总是不会刷新,也就是说除了第一次加载页面会向一般处理(ashx)拿数据外,其他情况都是优 ...

  6. secureCRT简单上传、下载文件记录

    secureCRT简单上传.下载文件记录: 1)sz下载 -y 覆盖 2)rz上传 -y 覆盖 3)以上两个命令属于安装时包含在“Dial-up Networking Support"组中 ...

  7. appcache checking update

    <!DOCTYPE html> <html manifest="a.appcache"> <head> <title></ti ...

  8. 敏捷开发的特点(转自MBAlib)

    敏捷开发的特点 敏捷方法主要有两个特点,这也是其区别于其他方法,尤其是重型方法的最主要特征: (1)敏捷开发方法是“适应性”(Adaptive)而非“预设性” (Predictive). 这里说的预设 ...

  9. javascript-代码复用模式

    代码复用模式 1)使用原型继承            函数对象中自身声明的方法和属性与prototype声名的对象有什么不同:      自身声明的方法和属性是静态的, 也就是说你在声明后,试图再去增 ...

  10. 关于对js的this的几点理解

    四种不同模式小调用的指向 1.函数调用模式的时候,this指向window 2.方法调用模式的时候,this指向方法所在的对象 3.构造函数模式的时候,this指向新生成的实例 4.apply/cal ...