2019计蒜之道初赛第3场-阿里巴巴协助征战SARS 费马小定理降幂

题目链接:https://nanti.jisuanke.com/t/38352

发现规律之后就是算ans=2^(n-1)+4^(n-1)。但是注意到n十分大是一个长度为1e5的数字。要想办法降幂。

我们观察费马小定理:a^(p-1)%p=1。发现对于质数取模,a^(p-1)是一个循环节(因为算出来等于1),可以忽略掉不算。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int P=1e9+7;
typedef long long LL;
char s[N];

LL power(LL x,LL p) {
    LL ret=1;
    for (;p;p>>=1) {
        if (p&1) ret=(ret*x)%P;
        x=(x*x)%P;
    }
    return ret;
}

int main()
{
    while (scanf("%s",s) && s[0]!=‘0‘) {
        LL n=0;
        for (int i=0;i<strlen(s);i++) {
            n=n*10%(P-1)+(s[i]-‘0‘); n%=(P-1);
        }
        n=((n-1)+(P-1))%(P-1);
        printf("%d\n",(power(2,n)+power(4,n))%P);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/clno1/p/10987740.html

时间: 2024-08-30 12:21:44

2019计蒜之道初赛第3场-阿里巴巴协助征战SARS 费马小定理降幂的相关文章

2017 计蒜之道 初赛 第五场 UCloud 的安全秘钥(中等)

每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方法如下: 首先,定义两个由数字序列组成的秘钥 aa 和 bb近似匹配(\approx≈) 的关系.aa 和 bb 近似匹配当且仅当同时满足以下两个条件: |a|=|b|∣a∣=∣b∣,即 aa 串和 bb 串长度相等. 对于每种数字 cc,cc 在 aa 中出现的次数等于cc 在 bb 中出现的次数

2017 计蒜之道 初赛 第五场 D. UCloud 的安全秘钥(困难)

小数据打表,大数据暴力. 导致超时的主要原因是$m$小的询问次数太多,可以把$m≤10$的答案直接暴力打表存起来,$m>10$的用$C$题的方法即可. #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <queue> #in

2017 计蒜之道 初赛 第五场 B. UCloud 的安全秘钥(简单)

暴力. 暴力枚举$S$串的每一个长度为$m$的子串,排序判断即可. #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <map> #inc

2017 计蒜之道 初赛 第五场 C. UCloud 的安全秘钥(中等)

暴力. $O(m*n)$的算法可以通过此题,每次询问$O(m)$扫S数组,统计不同数字的个数,每次移动最多只会变化两个数字,如果不同数字个数为$0$,那么答案加$1$. #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <queue&g

2017 计蒜之道 初赛 第五场 A. UCloud 机房的网络搭建

贪心. 从大到小排序之后进行模拟,注意$n=1$和$n=0$的情况. #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <map> #in

计蒜之道 初赛 第三场 题解

腾讯手机地图 腾讯手机地图的定位功能用到了用户手机的多种信号,这其中有的信号的作用范围近,有的信号作用的范围则远一些.有的信号相对于用户在不同的方位强度是不同的,有的则是在任何一个方向上信号强度都一致的. 已知用户面向北方拿着自己的手机,在不同方位的各种信号覆盖区域可以被抽象成以用户为圆心的一系列扇形.已知每个扇形的半径 r,和每个扇形的两条边相对于正东方向的夹角度数.每个信号覆盖区域抽象出的扇形都可以通过从第一条边逆时针旋转到第二条边画出. <img src="http://res.ji

2016计蒜之道初赛第四场A

在每年的淘宝“双十一”时,访问量都会暴涨,服务器的请求会被流量分配程序按照一定策略,分发给不同的进程去处理.有一类请求,有两个进程可以接受分发的请求,其中一个进程所在服务器的配置.网络传输性能等都要优于另一个进程.流量分发程序可以知道队列中每个任务的预计处理时间,每次都会尽可能将队列中预计处理时间更多的任务分配给性能更优的进程. 假设队列当前一共有 n 个任务待分配,第 i 个任务的预计处理时间为a?i??(1≤i≤n).由于服务存在冷启动问题,越靠后的进程,预计处理时间越短.而队列中的 最后一

计蒜之道 初赛 第三场--腾讯手机地图

题目大意是: 在坐标系里给你n个扇形的半径.起始,结束度数,计算扇形覆盖的面积. 如图: (因为现在无法提交了,所以无法验证代码,若有错的地方请指正) 这题首先要做的是对边的度数排序,不过是对所有度数排序,最开始想的时候只对扇形开始边的那个度数排序,写了半天一堆if else,后来突然想到了用所有边的度数排序. 首先需要对输进去每每条边度数进行处理,我用的是这个结构体 struct DU { int du;//度数 int r;//当前度数所对应的半径 bool if_end;//是否为扇形的结

2018 计蒜之道 初赛 第三场

A. 贝壳找房性价比 题解:按s排序后,斜率最大的点必定在相邻的两点之间. #pragma warning(disable:4996) #include<queue> #include<map> #include<string> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #de