切糕(bzoj 3144)
生活随笔
收集整理的這篇文章主要介紹了
切糕(bzoj 3144)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
Input
第一行是三個正整數P,Q,R,表示切糕的長P、 寬Q、高R。第二行有一個非負整數D,表示光滑性要求。接下來是R個P行Q列的矩陣,第z個 矩陣的第x行第y列是v(x,y,z) (1≤x≤P, 1≤y≤Q, 1≤z≤R)。
100%的數據滿足P,Q,R≤40,0≤D≤R,且給出的所有的不和諧值不超過1000。
Output
僅包含一個整數,表示在合法基礎上最小的總不和諧值。
Sample Input
2 2 21
6 1
6 1
2 6
2 6
Sample Output
6HINT
?
最佳切面的f為f(1,1)=f(2,1)=2,f(1,2)=f(2,2)=1
?
/*個人感覺很神的一道題目。如果有解的話,會有一個p滿足:(10^x-1)/9*8=L*p => 10^x-1=9*L*p/8設m=9*L/gcd(L,8)則存在p1使得 10^x-1=m*p1 => 10^x=1(mod m)根據歐拉定理 10^φ(m)=1(mod m)所以x一定是φ(m)的因數(這好像是某個定理)。 */ #include<iostream> #include<cstdio> #define lon long long #define N 400010 #ifdef unix #define LL "%lld" #else #define LL "%I64d" #endif using namespace std; int prime[N],f[N],num,qlen; lon q[N]; void get_prime(){for(int i=2;i<N;i++){if(!f[i]) prime[++num]=i;for(int j=1;j<=num;j++){if(i*prime[j]>=N) break;f[i*prime[j]]=1;if(i%prime[j]==0) break;}} } lon gcd(lon a,lon b){if(!b) return a;return gcd(b,a%b); } lon euler(lon x){lon res=x;for(lon i=2;i*i<=x;i++)if(x%i==0){res-=res/i;while(x%i==0) x/=i;}if(x>1) res-=res/x;return res; } void get_q(lon n){qlen=0;for(int i=1;i<=num&&n>1;i++){while(n%(lon)prime[i]==0){n/=prime[i];q[++qlen]=prime[i];}}if(n>1) q[++qlen]=n; } lon mul(lon a,lon b,lon mod){lon base=a,r=0;while(b){if(b&1) r+=base;r%=mod;base+=base;base%=mod;b>>=1;}return r; } lon poww(lon a,lon b,lon mod){lon base=a,r=1;while(b){if(b&1) r=mul(r,base,mod);base=mul(base,base,mod);b>>=1;}return r; } int main(){int cas=0;lon L;get_prime();while(scanf(LL,&L)&&L){lon m=9*L/gcd(L,8);if(gcd(m,10)>1){printf("Case %d: 0\n",++cas);continue;}lon x=euler(m);get_q(x);for(int i=1;i<=qlen;i++){if(poww(10,x/q[i],m)==1){x/=q[i];}}printf("Case %d: ",++cas);printf(LL,x);printf("\n");}return 0; }?
轉載于:https://www.cnblogs.com/harden/p/6517220.html
總結
以上是生活随笔為你收集整理的切糕(bzoj 3144)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EF中三大开发模式之DB First,M
- 下一篇: 再说javascript 的__prot