https://loj.ac/problem/6368

给一个分数,求对p=1e9+7取模的值。

给高一同学出的毒瘤模拟题,正好试试给loj传题,竟然过审了,虽然个人觉得很水,但是考试情况来看仅有一人得到了21分的好成绩。

可能坑有点多。

1.作为一个不细心的普及组选手如何得到0pts的好成绩

这这这不是水就能过吗?

费马小定理或扩欧求逆元不就可以了吗。

emmm高精度太难写,弃了吧。

反正51pts够了。

2.作为一个不细心的提高组选手只会做D1T1如何得到0pts的好成绩

这这这不是水就能过吗?

费马小定理或扩欧求逆元不就可以了吗。

高精度不就是a*b^(p-2)%p=a*(b%p)^(p-2)吗?

就敲一个高精除低精就行了。

100pts美滋滋。

3.作为一个不太细心的普及组选手如何得到21pts的好成绩

这这这不是水就能过吗?

费马小定理或扩欧求逆元不就可以了吗。

emm把分母为0的情况特盘掉,然后看一下提示。

woc出题人良心大大的坏,需要把负号提出来,不然第二个样例会输出500000003。

这样应该就有51pts了吧。

4.作为一个细心的普及组选手如何得到51pts的好成绩

咦30pts的包也不需要高精啊为什么单独拿出来呢?

哦如果分母是p的倍数的话不就没有逆元就无解了吗?

等等还要特判分子分母都有p这个因子的情况。

哇真的有51pts啊!

5.作为一个细心的提高组选手只会做D1T1如何得到100pts的好成绩

高精度的话有可能分子和分母有多个p因子。

那么我就暴力对上下同时除p直到有余数为止。(因为二者都是0说明可能还没有除尽)

判断分母余数为0且分子不为0就无解。

否则就费马小定理/扩欧计算即可。

100pts轻松到手。

代码有点丑,也懒得改写了。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long ll;
const ll p=1e9+;
ll qpow(ll k,ll n){
if(n==)return ;
if(n==)return k%p;
ll h=qpow(k,n/)%p;
if(n%==)return h%p*h%p;
return h%p*h%p*k%p;
}
char a[],b[];
ll c[],d[];
ll g[],h[];
ll e1=,e2=;
int s1,s2;
bool w=;
inline void init(){
scanf("%s%s",a,b);
if(a[]=='-'){
s1=strlen(a)-;
w=-w;
for(int i=;i<=s1;i++){
c[i]=a[i+]-'';
}
}else{
s1=strlen(a)-;
for(int i=;i<=s1;i++){
c[i]=a[i]-'';
}
}
if(b[]=='-'){
s2=strlen(b)-;
w=-w;
for(int i=;i<=s2;i++){
d[i]=b[i+]-'';
}
}else{
s2=strlen(b)-;
for(int i=;i<=s2;i++){
d[i]=b[i]-'';
}
}
return;
}
int main(){
init();
if(s2==&&d[]==){
printf("No Solution!\n");
return ;
}
if(s1==&&c[]==){
printf("0\n");
return ;
}
while(e1==&&e2==){
int l1=-,l2=-;
for(int i=;i<=s1;i++){
e1*=;
e1+=c[i];
if(e1>=p){
l1++;
g[l1]=e1/p;
e1%=p;
}else if(l1!=-){
l1++;
g[l1]=;
}
}
for(int i=;i<=s2;i++){
e2*=;
e2+=d[i];
if(e2>=p){
l2++;
h[l2]=e2/p;
e2%=p;
}else if(l2!=-){
l2++;
h[l2]=;
}
}
s1=l1;s2=l2;
for(int i=;i<=s1;i++)c[i]=g[i];
for(int i=;i<=s2;i++)d[i]=h[i];
}
if(e2==&&e1!=){
printf("No Solution!\n");
return ;
}
ll ans=e1%p*qpow(e2,p-)%p;
if(!w&&ans)putchar('-');
printf("%lld\n",ans);
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

LOJ6368:请让本题永远沉睡于此——题解的更多相关文章

  1. 【BZOJ4167】永远的竹笋采摘 分块+树状数组

    [BZOJ4167]永远的竹笋采摘 题解:我们考虑有多少点对(a,b)满足a与b的差值是[a,b]中最小的.以为是随机数据,这样的点对数目可能很少,实测是O(n)级别的,那么我们已知了有这么多可能对答 ...

  2. TensorFlow之DNN(二):全连接神经网络的加速技巧(Xavier初始化、Adam、Batch Norm、学习率衰减与梯度截断)

    在上一篇博客<TensorFlow之DNN(一):构建“裸机版”全连接神经网络>中,我整理了一个用TensorFlow实现的简单全连接神经网络模型,没有运用加速技巧(小批量梯度下降不算哦) ...

  3. 2019年腾讯最新Java工程师面试题

    一.单选题(共21题,每题5分) 1在正则表达式当中下面那一个字符集表示非空格字符   A.[:graph:] B.[:digit:] C.[:space:] D.[:alpha:] 参考答案:A 答 ...

  4. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

  5. ConCurrent in Practice小记 (2)

    Java-ConCurrent2.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0 ...

  6. Reset CSS:只选对的,不选"贵"的

    玉伯和正淳一起整理的一份 reset.css: /* KISSY CSS Reset 理念:清除和重置是紧密不可分的 特色:1.适应中文 2.基于最新主流浏览器 维护:玉伯(lifesinger@gm ...

  7. 【BZOJ】3673: 可持久化并查集 by zky & 3674: 可持久化并查集加强版(可持久化线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3674 http://www.lydsy.com/JudgeOnline/problem.php?id ...

  8. 【转】Flask快速入门

    迫不及待要开始了吗?本页提供了一个很好的 Flask 介绍,并假定你已经安装好了 Flask.如果没有,请跳转到 安装 章节. 一个最小的应用 一个最小的 Flask 应用看起来会是这样: from ...

  9. skynet newservice API参考

    local skynet = require("skynet") skynet.start(start_func) c服务snlua启动后执行的第一个lua文件里面的主逻辑必定是s ...

随机推荐

  1. 【算法分析】如何理解快慢指针?判断linked list中是否有环、找到环的起始节点位置。以Leetcode 141. Linked List Cycle, 142. Linked List Cycle II 为例Python实现

    引入 快慢指针经常用于链表(linked list)中环(Cycle)相关的问题.LeetCode中对应题目分别是: 141. Linked List Cycle 判断linked list中是否有环 ...

  2. 【转】jQuery的deferred对象详解

    jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本. 每个版本都会引入一些新功能.今天我想介绍的,就是从jQuery 1.5.0版本开始引入的一个新功能----deferred对象. ...

  3. Python中的namespace package

    在Python 3.3之前,一个目录想被当成package被导入,必须包含__init__.py文件:而在Python 3.3及以后的版本中,__init__.py文件可以不需要,直接使用import ...

  4. StrBlob类——智能指针作为成员

    /* 管理string的类 使用vector来管理元素 由于类对象被销毁时相应的元素成员也将销毁 所以需要将vector保存在动态内存中 */ //该程序鲁棒性不强,没有考虑到vector为空的情况 ...

  5. Check the string

    A has a string consisting of some number of lowercase English letters 'a'. He gives it to his friend ...

  6. python学习摘要(2)--基本数据类型

    python申请存储空间是动态的.变量如同指针一样指向存储空间.多个变量会指向同一个存储空间(节省空间).当变量改变时,原来的地址单元并不会马上释放.(引用计数自行回收) c/c++根基性语言,想要什 ...

  7. Debian常用設置

    1. 更新軟件源 sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak #備份 sudo vi /etc/apt/sources.list / ...

  8. OSG学习:基本几何体绘制示例

    绘制并渲染几何体主要有如下3大步骤: 1.创建各种向量数据,如顶点.纹理坐标.颜色和法线等.需要注意的是,添加顶点数据时主要按照逆时针顺序添加, 以确保背面剔除的正确. 2.实例化一个几何体对象(os ...

  9. HDU 2124 Repair the Wall

    http://acm.hdu.edu.cn/showproblem.php?pid=2124 Problem Description Long time ago , Kitty lived in a ...

  10. 将sublime添加到右键菜单

    sublime text 添加到鼠标右键功能: 把以下内容复制并保存到文件,重命名为:sublime_addright.reg,然后双击就可以了. (注意:需要把下面代码中的Sublime的安装目录( ...