Hướng dẫn giải của Space settlement
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này
Code mẫu của flashmt
#include<iostream> #define z 12345678 using namespace std; long long re; int k,t,m,n; long long pow(int x,int y) { if (y==1) return x; long long r=pow(x,y/2); r=r*r%z; if (y%2==1) r=r*x%z; return r; } int main() { cin >> t; while (t--) { cin >> m >> n >> k; re=m; re=re*n%z; if (m>2) m=n*2; else m=n*(m-1); if (n>2) m+=2; else m++; if (k>1) re=re*pow(m,k-1)%z; cout << re << endl; } return 0; }
Code mẫu của RR
//Written by Nguyen Thanh Trung {$R+,Q+} {$Mode objFPC} uses math; const FINP = ''; FOUT = ''; oo = 12345678; var f1,f2 : text; n,m,k,test : longint; procedure openF; begin assign(f1,FINP); reset(f1); assign(f2,FOUT); rewrite(f2); end; procedure closeF; begin close(f1); close(f2); end; function lt(a,k:longint):longint; var temp:int64; begin if k=0 then exit(1); if k=1 then exit(a); temp:=lt(a,k>>1); temp:=(temp*temp) mod oo; if k and 1=1 then temp:=(temp*a) mod oo; exit(temp mod oo); end; begin openF; read(f1,test); for test:=1 to test do begin read(f1,m,n,k); if m=1 then begin if n=1 then writeln(f2,1) else if n=2 then writeln(f2,2) else writeln(f2,(int64(n)*lt(2,k-1)) mod oo); end else if m=2 then begin if n=1 then writeln(f2,(int64(2)*lt(2,k-1)) mod oo) else if n=2 then writeln(f2,(int64(2)*n*lt(3,k-1)) mod oo) else writeln(f2,(int64(2)*n*lt(n+2,k-1)) mod oo); end else if n=1 then writeln(f2,(int64(m)*lt(3,k-1)) mod oo) else if n=2 then writeln(f2,(int64(2*m)*lt(5,k-1)) mod oo) else writeln(f2,(((int64(m)*n) mod oo)*lt(n<<1+2,k-1)) mod oo); end; closeF; end.
Code mẫu của hieult
#include <stdio.h> //#include <conio.h> #define du 12345678 long long test,m,n,k,t; long long f(long long x) { if(x==0) return 1; else { long long m = f(x/2); if(x%2==0) return ((m*m)%du); else return (((m*m)%du)*t)%du; } } int main() { // freopen("SPACESET.in","r",stdin); scanf("%lld",&test); for(int i = 1;i<=test;i++) { scanf("%lld %lld %lld",&m,&n,&k); if(m<=0 || n<=0 || k==0) printf("0\n"); else { if(m==1) { { if(n==1) t=1; else if(n==2) t=1; else t = 2; printf("%lld\n",(((m*n)%du)*f(k-1))%du); } } else if(m==2) { if(n==1) t = 2; else if(n==2) t= 3; else t = (n+2)%du; printf("%lld\n",(((m*n)%du)*f(k-1))%du); } else { if(n==1) t = 3; else if(n==2) t = 5; else t = (2*n+2)%du; printf("%lld\n",(((m*n)%du)*f(k-1))%du); } } } //getch(); }
Code mẫu của ll931110
{$MODE DELPHI} program SPACESET; const input = ''; output = ''; rem = 12345678; var nTest,i: integer; n,m,k,res: int64; fi,fo: text; procedure openfile; begin assign(fi, input); reset(fi); assign(fo, output); rewrite(fo); end; function calc(x,p: int64): int64; var t: int64; begin if p = 1 then exit(x); t := calc(x,p div 2); t := (t * t) mod rem; if odd(p) then t := (t * x) mod rem; calc := t; end; procedure solve; begin readln(fi, m, n, k); if (m = 0) or (n = 0) or (k = 0) then begin res := 0; exit; end; if k = 1 then begin res := (m * n) mod rem; exit; end; if m = 1 then begin if n = 1 then res := 1 else if n = 2 then res := 2 else res := (n * calc(2,k - 1)) mod rem; exit; end; if m = 2 then begin if n = 1 then res := calc(2,k) else if n = 2 then res := (2 * n * calc(3,k - 1)) mod rem else res := (2 * n * calc(n + 2,k - 1)) mod rem; exit; end; if n = 1 then begin res := (m * calc(3,k - 1)) mod rem; exit; end; if n = 2 then begin res := (2 * m * calc(5,k - 1)) mod rem; exit; end; res := calc(2 * n + 2,k - 1); res := (res * m) mod rem; res := (res * n) mod rem; end; procedure printresult; begin writeln(fo, res); end; procedure closefile; begin close(fo); close(fi); end; begin openfile; readln(fi, nTest); for i := 1 to nTest do begin solve; printresult; end; closefile; end.
Bình luận