0
点赞
收藏
分享

微信扫一扫

ACM队 21级基础训练赛第七场--26104

是波波呀 2022-03-24 阅读 23
c++算法

 



#include<iostream>
#include<queue>
#include<set>
#include<string>
#include<numeric>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<map>
#define int long long
using namespace std;
const int MaxN = 2e5 + 5;
int ans = 0;
int n;
int a[200001];
int b[200001];

using pii = pair<int, int>;

bool com(int a, int b)
{
    return a > b;
}
int gcd(int a, int b)
{
    if (a == 0 || b == 0)return 0;
    while (a ^= b ^= a ^= b %= a);
    return b;
}
unsigned int q_mul(int a, int b, int mod)
{
    unsigned int ans = 0;
    while (b)
    {
        if (b & 1)
        {
            b--;
            ans = (ans + a) % mod;
        }
        b >>= 1;
        a = (a + a) % mod;
    }
    return ans;
}
int qpow(int a, int n, int mod)
{
    int ans = 1;
    while (n)
    {
        if (n & 01)ans = ans * a % mod;
        a = a * a % mod;
        n >>= 1;
    }
    return ans;
}
struct jihe {
    int a;
    int b;
};
struct jihe arr[MaxN];
int poww[MaxN];
void solves() {

    string a1, b1;
    int p;
    unsigned int temp1 = 0, temp2 = 0, temp = 0, a, b;
    cin >> a1 >> b1 >> p;
    poww[0] = 1;
    for (int i = 1; i <= 100005; i++) {
        poww[i] = (poww[i - 1] * 10) % p;
    }
    for (int i = 0; i < a1.length(); ++i)
    {
        temp1 = (temp1 + (a1[i] - '0') * poww[a1.length() - i - 1] % p) % p;
    }
    //cout<<temp1<<endl;
    for (int i = 0; i < b1.length(); ++i)
    {
        temp2 = (temp2 % p + (b1[i] - '0') * poww[b1.length() - i - 1] % p) % p;
    }
    //cout<<temp2<<endl;
    unsigned int res = q_mul(temp1,temp2,p)%p;
    cout << res << endl;
}


signed  main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int t;
    cin >> t;
    while (t--)
        solves();
    return 0;
}


#include<iostream>
#include<queue>
#include<set>
#include<string>
#include<numeric>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<map>
#define int long long
using namespace std;
const int MaxN = 2e5 + 5;
int ans = 0;
int n;
int a[200001];
int b[200001];

using pii = pair<int, int>;


inline __int128 read()
{
    __int128 x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch>'9')
    {
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
    {
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}

inline void write(__int128 x) {
    if (x < 0) {
        putchar('-');
        x = -x;
    }
    if (x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
}
__int128 poww[MaxN];
void solves() {

    string a1, b1;
    int p;
    __int128 temp1 = 0, temp2 = 0, temp = 0, a, b;
    cin >> a1 >> b1 >> p;
    poww[0] = 1;
    for (int i = 1; i <= 100005; i++) {
        poww[i] = (poww[i - 1] * 10) % p;
    }
    for (int i = 0; i < a1.length(); ++i)
    {
        temp1 = (temp1 + (a1[i] - '0') * poww[a1.length() - i - 1] % p) % p;
    }
    //cout<<temp1<<endl;
    for (int i = 0; i < b1.length(); ++i)
    {
        temp2 = (temp2 % p + (b1[i] - '0') * poww[b1.length() - i - 1] % p) % p;
    }
    //cout<<temp2<<endl;
    __int128 res = (temp1 * temp2 % p) % p;
    write(res);
    puts("");
}


signed  main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int t;
    cin >> t;
    while (t--)
        solves();
    return 0;
}

下面是完整思路:


举报

相关推荐

0 条评论