BZOJ 1008 越獄

       這道題我放了好久沒有作,就是由於數據太大沒什麼好方法,直到後來受大神指點才發現,一道數學題被我卡死這麼久。ios

       這道題的關鍵就是逆向思惟,所謂逆向思惟就是倒着想,既然題讓咱們求越獄的狀況數,這個很差求,咱們不妨求一下不越獄的狀況數,這樣用總數一減便可,根據數學思想,n個房間,m種宗教,則共有m的n次方種總可能數,不越獄的狀況有m乘(m-1)的(n-1)次方個,那麼結果就是二者相減,可是別急,這樣算你依然會錯,由於次方運算太慢,因此你還須要用到快速冪。spa

       代碼以下:code

#include<cstdio>
#include<cstdlib> 
#include<iostream>

#define mod 100003
using namespace std;

long long int i_kinds,i_room;
long long int i_result,i_temp;

long long int multiply(long long int a,long long int x)
{
    long long int b=1;
    while(x>0){
        if(x&1){
          b=b*a%mod;
        }
        a=a*a%mod;
        x=x>>1;
    }
    return b;
}
int main()
{
    scanf("%lld%lld",&i_kinds,&i_room);
    
    i_kinds=i_kinds%mod;
    i_temp=multiply(i_kinds,i_room)%mod;
    i_result=i_temp;
    i_temp=i_kinds*multiply(i_kinds-1,i_room-1)%mod;
    i_result=i_result+mod-i_temp;
    i_result=i_result%mod;
    
    printf("%lld",i_result);
    
    return 0;
}
感謝各位閱讀個人博客,但願你們能有所收穫,謝謝。
相關文章
相關標籤/搜索