uva11916 Emoogle Grid (BSGS)
https://uva.onlinejudge.org/external/119/p11916.pdf
令m表示不能染色的格子的最大行号
设>m行时可以染k种颜色的格子数有ck个,恰好有m行时可以染k种颜色的格子数有ckm个
分m行、m+1行、>m+1行讨论
如果是m行:k^ckm * (k-1)^(n*m-b-ckm) = r
如果是m+1行, k^ckm * (k-1)^(n*m-b-ckm) * k^(ck-ckm) * (k-1)^(n-(ck-ckm)) = r
如果>m行,k^ckm * (k-1)^(n*m-b-ckm) * k^(ck-ckm) * (k-1)^(n-(ck-ckm)) * k^n^mm = r ,ans=m+1+mm
求mm用bsgs
注意:
1、后面注意b=0的情况,当b=0时,n*m-b-ckm 是负数,快速幂死循环,注意特判
2、用bsgs时,A^B≡C mod P,其中A=k^n,不能令A=k,求出的B再除以n
#include<map>
#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; const int mod=1e8+; #define N 501 struct node
{
int x,y;
}e[N+]; map<int,int>mp; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} int Pow(int a,long long b)
{
int res=;
for(;b;b>>=,a=1LL*a*a%mod)
if(b&) res=1LL*res*a%mod;
return res;
} int get_inv(int a)
{
return Pow(a,mod-);
} int BSGS(int a,int b,int p)
{
mp.clear();
int m=sqrt(p);
mp[b]=;
for(int i=;i<=m;++i)
{
b=1LL*b*a%mod;
mp[b]=i;
}
int am=Pow(a,m);
int mul=;
for(int i=;i<=m;++i)
{
mul=1LL*mul*am%mod;
if(mp.find(mul)!=mp.end()) return i*m-mp[mul];
}
return -;
} bool cmp(node p,node q)
{
if(p.y!=q.y) return p.y<q.y;
return p.x<q.x;
} int main()
{
int T;
int n,k,b,r;
int m,x,y;
int ck,ckm;
int a,rr;
int ans;
read(T);
for(int t=;t<=T;++t)
{
read(n); read(k); read(b); read(r);
ck=ckm=n; m=;
for(int i=;i<=b;++i)
{
read(e[i].x); read(e[i].y);
if(e[i].x==) ck--,ckm--;
m=max(m,e[i].x);
}
sort(e+,e+b+,cmp);
e[b+].x=e[b+].y=-;
for(int i=;i<=b;++i)
if(!(e[i].y==e[i+].y && e[i].x==e[i+].x-))
{
ck++;
if(e[i].x!=m) ckm++;
}
if(m)
{
rr=1LL*Pow(k,ckm)*Pow(k-,1LL*n*m-b-ckm)%mod;
if(rr==r)
{
printf("Case %d: %d\n",t,m);
continue;
}
rr=1LL*rr*Pow(k,ck-ckm)%mod;
rr=1LL*rr*Pow(k-,n-(ck-ckm))%mod;
}
else rr=Pow(k,n);
if(rr==r)
{
printf("Case %d: %d\n",t,m+);
continue;
}
r=1LL*r*get_inv(rr)%mod;
a=BSGS(Pow(k-,n),r,mod);
printf("Case %d: %d\n",t,a+m+);
}
return ;
}
uva11916 Emoogle Grid (BSGS)的更多相关文章
- uva 11916 Emoogle Grid (BSGS)
UVA 11916 BSGS的一道简单题,不过中间卡了一下没有及时取模,其他这里的100000007是素数,所以不用加上拓展就能做了. 代码如下: #include <cstdio> #i ...
- UVA 11916 Emoogle Grid(同余模)
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 【BZOJ5296】【CQOI2018】破解D-H协议(BSGS)
[BZOJ5296][CQOI2018]破解D-H协议(BSGS) 题面 BZOJ 洛谷 Description Diffie-Hellman密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方 ...
- SilverLight:布局(1) Border(边框)对象、Grid(网格)对象
ylbtech-SilverLight-Layout:布局(1) Border(边框)对象.Grid(网格)对象 A, Border(边框)对象 B, Grid(网格)对象 C, Grid(网格)对象 ...
- [uva11916] Emoogle Grid (离散对数)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Emoogle Grid You have to color an MxN ( ...
- UVA11916 Emoogle Grid
Emoogle Grid You have to color an M × N (1 ≤ M, N ≤ 108 ) two dimensional grid. You will be provided ...
- 【洛谷九月月赛T1】签到题(bsgs)(快速乘)
说好的签到题呢qwq....怎么我签到题都不会啊qwq 之后看了bsgs才发现貌似不是那么那么难fake!!什么东西... 先贴上部分分做法(也就是枚举1的个数,然后每一步都进行取模(这和最后取模结果 ...
- Oracle集群 & Grid(rac)配置,反推创建过程(重要)。
目前机器上,oracle都是安装好的,那么我们怎么知道,之前的安装过程大概是什么样子呢? 大致安装oracle集群的内容: 一.准备和配置: 1.网卡 2.ip资源 3.scanip 4.hosts ...
- [SDOI2011]计算器(BSGS)
洛古题面 对于操作一,用快速幂算即可 代码如下 int quickpow(int a,int b,int k) { int r=1; while(b) { if(b&1) r=(r*a)%k; ...
随机推荐
- [AHOI2008]紧急集合 / 聚会
题目描述 欢乐岛上有个非常好玩的游戏,叫做“紧急集合”.在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个等待点,且通过这些道路可以走遍所有的等待点,通过道路从一个点到另一个点要 ...
- 【XSY2032】简单粗暴的题目 组合数
题目描述 给你\(n,k,a_1\ldots a_n\),设 \[ ans_n=\sum_{i=1}^n{(\sum_{j=i}^ns(j))}^k\\ \] 求\(ans_1\ldots ans_n ...
- thymeleaf中的判断总结
判断String字符串,添加引号 th:class="${flag=='forum.html'}?'active'" 判断boolean类型,注意不能当成字符串处理,不能添加引号 ...
- project 2013 删除资源
1.分析 在资源名称这边一旦输入过资源名称,下次点击下拉框就会出现历史记录,如何删除 2.步骤 资源-->分配资源-->点击资源名称,按F2,按DEL键
- eclipse 保存html 提示 save could not be completed
重启ecplise 即可
- Android undefined intent constructor错误?
本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术.在Android中启动Service时出现&qu ...
- One-hot encoding 独热编码
http://blog.sina.com.cn/s/blog_5252f6ca0102uy47.html
- Jmeter工具之上传图片,上传音频文件接口
https://www.jianshu.com/p/f23f7fe20bf3 互联网时代的来临,不同手机上安装的APP,还是PC端的应用软件或多或多都会涉及到图片的上传,那么在Jmeter工具如何模拟 ...
- cf1061E Politics (费用流)
看到数据范围,考虑网络流..但考的时候完全不知道怎么建图 考虑流量表示选的点个数,费用表示选点的收益,跑最大费用最大流 那么我用一个点x表示某树中的询问点x,刨去它子孙询问点的子树后的子树 对于树1, ...
- Golang Kernel For Jupyter-NoteBook
上篇回顾:VSCode and NoteBook for JavaScript 正常流程 安装Go语言:sudo apt install golang 安装内核的相关依赖包:sudo apt inst ...