BZOJ5131: [CodePlus2017年12月]可做题2

BZOJ没有题面,差评

洛谷的题目链接

题解

其实这题很久之前就写了,也想写个题解但是太懒了,咕到了今天

在typora写完题解不想copy过来再改格式了,于是直接贴截图qwq

#include <bits/stdc++.h>

#define ll long long
#define inf 0x3f3f3f3f
#define il inline
#define int long long

namespace io {

    #define in(a) a=read()
    #define out(a) write(a)
    #define outn(a) out(a),putchar('\n')

    #define I_int int
    inline I_int read() {
        I_int x = 0 , f = 1 ; char c = getchar() ;
        while( c < '0' || c > '9' ) { if( c == '-' ) f = -1 ; c = getchar() ; }
        while( c >= '0' && c <= '9' ) { x = x * 10 + c - '0' ; c = getchar() ; }
        return x * f ;
    }
    char F[ 200 ] ;
    inline void write( I_int x ) {
        if( x == 0 ) { putchar( '0' ) ; return ; }
        I_int tmp = x > 0 ? x : -x ;
        if( x < 0 ) putchar( '-' ) ;
        int cnt = 0 ;
        while( tmp > 0 ) {
            F[ cnt ++ ] = tmp % 10 + '0' ;
            tmp /= 10 ;
        }
        while( cnt > 0 ) putchar( F[ -- cnt ] ) ;
    }
    #undef I_int

}
using namespace io ;

using namespace std ;

#define N 100010

int a1 , l , r , k , p , m ;
struct matrix {
    int m[2][2] ;
    matrix() { memset(m,0,sizeof(m)); }
    matrix operator * (const matrix &x) {
        matrix ans;
        for(int i = 0 ; i < 2 ; i ++) {
            for(int j = 0 ; j < 2 ; j ++) {
                for(int k = 0 ; k < 2 ; k ++) {
                    ans.m[i][j] = (ans.m[i][j] + m[i][k] * x.m[k][j]) % p ;
                }
            }
        }
        return ans ;
    }
} base , ans ;

void power(int b) {
    base.m[0][0] = base.m[1][0] = base.m[0][1] = 1 ; base.m[1][1] = 0 ;
    ans.m[0][0] = ans.m[1][1] = 1 ; ans.m[1][0] = ans.m[0][1] = 0 ;
    while(b) {
        if(b&1) ans = ans * base ;
        base = base * base ;
        b >>= 1;
    }
}

int x , y ;
int exgcd(int a , int b) {
    if(b == 0) { x = 1 ; y = 0 ; return a ; }
    int Ans = exgcd(b , a % b) , t = x ;
    x = y ; y = t - (a / b) * y ;
    return Ans ;
}

int find(int x , int t) {
    int l = 0 , r = t / p + 1 ;
    while(l <= r) {
        int mid = (l + r) >> 1 ;
        if(x + p * mid >= t) r = mid - 1 ;
        else l = mid + 1 ;
    }
    return l ;
}

signed main() {
    int T = read() ;
    while(T--) {
        a1 = read() , l = read() , r = read() , k = read() , p = read() , m = read() ;
        a1 %= p ; power(k - 2) ;
        int mod = (m - a1 * ans.m[1][0] % p + p) % p ;
        int gcd = exgcd(ans.m[0][0] , p) ;
        if(mod % gcd != 0) { puts("0") ; continue ; }
        x = x * (mod/gcd) ; p /= gcd ; x = (x % p + p) % p ;
        outn( find(x , r+1) - find(x , l) ) ;
    }
}

 

全部评论

相关推荐

04-29 22:35
门头沟学院 Java
牛友说改了名字能收到offer:旧图新发查看图片
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务