Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Problem Description
 Please calculate how many nodes are in the delta and not on the segments,output answer mod P.
 

 

Input
10.
 

 

Output
 Output 1 number to each testcase,answer mod P.
 

 

Sample Input
1 2 107
 

 

Sample Output
0
 

 

Source
题解:答案就是((p-1)*(p-2)/2)%mod;p是10^18以内直接乘就会爆;利用俄罗斯乘法的加法性质得到答案;(现场做只会想到java大数。。果然菜鸟。。。)
   俄罗斯乘法:http://baike.baidu.com/link?url=vVo1zdml29g80N-BYvpdm2hNGpYwSnGoJsnAJmook4AJBiYUVL_ort5f7XqFJ0yx6zxB5ha90q6-1LD6HxPIaa
俄罗斯乘法代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
using namespace std;
#define ll __int64
#define inf 2000000001
int scan()
{
    int res = 0 , ch ;
    while( !( ( ch = getchar() ) >= '0' && ch <= '9' ) )
    {
        if( ch == EOF )  return 1 << 30 ;
    }
    res = ch - '0' ;
    while( ( ch = getchar() ) >= '0' && ch <= '9' )
        res = res * 10 + ( ch - '0' ) ;
    return res ;
}
ll eluosimul(ll x,ll y,ll mod)
{
    ll sum=0;
    while(x)
    {
        if(x&1)
        {
            sum+=y;
            sum%=mod;
        }
        x>>=1;
        y*=2;
        y%=mod;
    }
    return sum;
}
int main()
{
    ll x,y,z,i,t,m,q;
    scanf("%I64d",&x);
    while(x--)
    {
        ll ans;
        scanf("%I64d%I64d",&q,&m);
        if(q%2)
        ans=eluosimul(q-2,(q-1)/2,m);
        else
        ans=eluosimul(q-1,(q-2)/2,m);
        printf("%I64d\n",ans);
    }
    return 0;
}
View Code

java:

import java.util.*;
import java.math.*;
public class Main {
    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        int x;
        x=cin.nextInt();
        while(x!=0)
        {
            x--;
            BigInteger c=new BigInteger("2");
            BigInteger e=new BigInteger("1");
            BigInteger a=cin.nextBigInteger();
            BigInteger d=a.subtract(c);
            BigInteger f=a.subtract(e);
            BigInteger b=cin.nextBigInteger();
            BigInteger ans=f.multiply(d);
            ans=ans.divide(c);
            System.out.println(ans.remainder(b));
        }
    }
}
View Code

相关文章:

  • 2022-01-07
  • 2022-03-02
  • 2021-12-15
  • 2022-12-23
  • 2022-12-23
  • 2021-08-19
猜你喜欢
  • 2021-10-03
  • 2022-12-23
  • 2021-12-05
  • 2022-02-18
  • 2022-12-23
  • 2022-12-23
  • 2021-08-06
相关资源
相似解决方案