zoukankan      html  css  js  c++  java
  • Luogu P3868 [TJOI2009]猜数字

    题目链接 (Click) (Here)

    中国剩余定理的板子。小心取模。

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 11;
    #define int long long
    
    
    int n, M = 1, a[N], b[N], t[N], ans;
    
    int fmul (int x, int y, int mod) {
    	int res = 0;
    	while (y) {
    		if (y & 1) {
    			res = (res + x) % mod;
    		}
    		x = (x + x) % mod;
    		y >>= 1;
    	}
    	return res;
    }
    
    void exgcd (int a, int b, int &x, int &y) {
    	if (b == 0) {x = 1, y = 0; return;}
    	exgcd (b, a % b, x, y);
    	int xx = y, yy = x - (a / b) * y;
        x = xx, y = yy;
    }
    
    signed main () {
    	cin >> n;
    	for (int i = 1; i <= n; ++i) cin >> a[i];
    	for (int i = 1; i <= n; ++i) cin >> b[i];
    	for (int i = 1; i <= n; ++i) a[i] = ((a[i] % b[i]) + b[i]) % b[i];
    	for (int i = 1; i <= n; ++i) M *= b[i];
    	for (int i = 1; i <= n; ++i) {
    		exgcd (M / b[i], b[i], t[i], t[0]);
    		t[i] = ((t[i] % b[i]) + b[i]) % b[i];
    		ans = (ans + fmul (fmul (M / b[i], t[i], M), a[i], M)) % M; 
    	}
    	cout << ((ans % M) + M) % M << endl;
    	
    }
    
    
  • 相关阅读:
    [SCOI2008]奖励关
    [HNOI2015]落忆枫音
    [HAOI2012]高速公路
    [HNOI2012]集合选数
    A. 【UNR #2】积劳成疾
    整体二分
    [HNOI2015]亚瑟王
    [SDOI2010]星际竞速
    [SDOI2010]地精部落
    [SDOI2014]数数
  • 原文地址:https://www.cnblogs.com/maomao9173/p/10485489.html
Copyright © 2011-2022 走看看