• HDU-5685 Problem A 求乘法逆元


    题目链接:https://cn.vjudge.net/problem/HDU-5685

    题意

    给一个字符串S和一个哈希算法 $ H(s)=prod_{i=1}^{ileq len(s)}(S_{i}-28) (mod 9973) $
    问[a, b]之间的字符串的哈希值

    思路

    维护一个前缀乘积prev,要求[a, b]的hash,只要(prev[b]*inv(prev[a-1]))%mod即可
    求逆元kuangbin总结:找不到了怎么回事

    提交过程

    AC

    代码

    #include <cstdio>
    #include <cstring>
    const int maxn=1e5+20, mod=9973;
    char str[maxn];
    int prev[maxn], n, len;
    int exgcd(int a, int b, int &x, int &y){
    	if (b==0){x=1; y=0; return a;}
    	int gcd=exgcd(b, a%b, y, x);
    	y-=(a/b)*x;
    	return gcd;
    }
    
    int inv(int a, int p){
    	int x, y, gcd=exgcd(a, p, x, y);
    	if (gcd==1) return (x%p+p)%p;
    	return -1;
    }
    
    int main(void){
    	while (scanf("%d", &n)==1 && n){
    		scanf("%s", str+1);
    		len=strlen(str+1);
    
    		prev[0]=1;
    		for (int i=1; i<=len; i++)
    			prev[i]=(prev[i-1]*(str[i]-28))%mod;
    		
    		int a, b;
    		while (n--){
    			scanf("%d%d", &a, &b);
    			printf("%d
    ", (prev[b]*inv(prev[a-1], mod))%mod);
    		}
    	}
    
    	return 0;
    }
    
    Time Memory Length Lang Submitted
    109ms 1700kB 651 G++ 2018-07-30 20:04:51
  • 相关阅读:
    协程与IO模型
    进程池与线程池
    GIL全局解释器锁
    线程编程
    进程编程
    基于UDP协议的socket
    异常处理
    jquery mobile外部js无法载入问题
    禁用或限制部分WebKit特性
    eval 返回变量值
  • 原文地址:https://www.cnblogs.com/tanglizi/p/9392960.html
Copyright © 2020-2023  润新知