2 条题解

  • 1
    @ 2025-9-18 20:50:34

    AC 代码,不A我吃💩

    100 Accepted

    状态分数 耗时 内存占用

    #1 Accepted5 1ms 256 KiB #2 Accepted5 1ms 256 KiB #3 Accepted5 1ms 256 KiB #4 Accepted5 1ms 256 KiB #5 Accepted5 0ms 256 KiB #6 Accepted5 1ms 256 KiB #7 Accepted5 0ms 256 KiB #8 Accepted5 0ms 256 KiB #9 Accepted5 0ms 256 KiB #10 Accepted5 0ms 256 KiB #11 Accepted5 1ms 296 KiB #12 Accepted5 49ms 1.6 MiB #13 Accepted5 39ms 1.8 MiB #14 Accepted5 50ms 1.6 MiB #15 Accepted5 53ms 1.6 MiB #16 Accepted5 34ms 1.8 MiB #17 Accepted5 42ms 1.6 MiB #18 Accepted5 40ms 1.6 MiB #19 Accepted5 50ms 1.6 MiB #20 Accepted5 37ms 1.8 MiB

    #include<queue>
    #include<math.h>
    #include<stdio.h>
    #include<iostream>
    #include<vector>
    #include<iomanip>
    #include<string.h>
    #include<algorithm>
    #include<unordered_map>
    #include<cmath>
    #include<cstdio>
    #include<utility>
    #include<cstring>
    #include<stack>
    #include<fstream>
    #include<string>
    using namespace std;
    #define LL long long
    const int N = 1e5 + 10;
    const int INF = 0x3f3f3f3f;
    long long qmi( long long a , long long k , long long p )
    {
    	long long res = 1;
    	while ( k )
    	{
    		if ( k & 1 )
    		{
    			res = ( res * a ) % p;
    		}
    		a = ( a * a ) % p;
    		k >>= 1;
    	}
    	return res;
    }
    long long bsgs( long long a , long long b , long long p )
    {
    	unordered_map< long long , long long >mp;
    	if ( 1 % p == b % p )
    	{
    		return 0;
    	}
    	long long k = sqrt(p) + 1;
    	for ( long long i = 0,j = b % p; i < k; i ++ ){
    		mp[j] = i;
    		j = (long long)j * a % p;
    	}
    	long long t = 1 % p;
    	for ( long long i = 0 ; i < k ; i++ )
    	{
    		t = (long long)t * a % p;
    	}
    	for ( long long i = 1 , j = t; i <= k ; i++ )
    	{
    		if ( mp.count(j) )
    		{
    			return (long long)i * k - mp[j];
    		}
    		j = (long long)j * t % p;
    	}
    	return -1;
    }
    int main()
    {
    	long long n ,T;
    	cin >> n >> T;
    	if ( T == 1 )
    	{
    		for ( long long i = 1 ; i <= n ; i++ )
    		{
    			long long a , b , p;
    			cin >> a >> b >> p;
    			cout << qmi( a , b , p ) << endl;
    		}
    	}
    	else if ( T == 2 )
    	{
    		for ( int i = 1 ;  i <= n ; i++ )
    		{
    			int a , b , p;
    			cin >> a >> b >> p;
    			a %= p;
    			b %= p;
    			if ( a == 0 && b != 0 )
    			{
    				cout << "Orz, I cannot find x!" << endl;
    			}
    			else
    			{
    				cout << qmi( a , p - 2 , p) * b % p << endl;
    			}
    		}
    	}
    	else
    	{
    		for ( long long i = 1 ; i <= n ; i++ )
    		{
    			long long a , b , p;
    			cin >> a >> b >> p;
    			if ( a % p == b % p )
    			{
    				cout << 1 << endl;
    				continue;
    			}
    			a %= p;
    			long long t = bsgs( a , b , p );
    			if ( a == 0 && b == 0 )
    			{
    				cout << 1 << endl;
    			}
    			else if ( a == 0 && b != 0 )
    			{
    				cout << "Orz, I cannot find x!" << endl;
    			}
    			else
    			{
    				if ( t == -1 )
    				{
    					cout << "Orz, I cannot find x!" << endl;
    				}
    				else
    				{
    					cout << t << endl;
    				}
    			}
    		}
    	}
    	return 0;
    }
    

    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

    信息

    ID
    514
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    8
    已通过
    1
    上传者