Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define rep(i,k,n) for(long long int i=k;i<n;i++)
- #define fast ios_base::sync_with_stdio(false);cin.tie(NULL)
- #define read freopen("input.txt","r",stdin)
- #define write freopen("output.txt","w",stdout)
- #define DBG(x) cout << '>' << #x << ':' << x << endl
- #define PI acos(-1)
- #define MP(x, y) make_pair(x, y)
- #define PB(x) push_back(x)
- #define ALL(p) p.begin(),p.end()
- #define CLR(p) memset(p, 0, sizeof(p))
- #define MEM(a, b) memset(a, (b), sizeof(a))
- #define ff first
- #define ss second
- #define sf scanf
- #define pf printf
- #define PII pair<int, int>
- #define ll long long int
- #define ull unsigned long long int
- inline int two(int n) { return 1 << n; }
- inline int test(int n, int b) { return (n>>b)&1; }
- inline void set_bit(int & n, int b) { n |= two(b); }
- inline void unset_bit(int & n, int b) { n &= ~two(b); }
- inline int last_bit(int n) { return n & (-n); }
- inline int ones(int n) { int res = 0; while(n && ++res) n-=n&(-n); return res; }
- void MatrixMul(ll a[2][2], ll b[2][2], ll M)
- {
- int a00 = ((a[0][0]*b[0][0]) + (a[0][1]*b[1][0]))%M;
- int a01 = ((a[0][0]*b[0][1]) + (a[0][1]*b[1][1]))%M;
- int a10 = ((a[1][0]*b[0][0]) + (a[1][1]*b[1][0]))%M;
- int a11 = ((a[1][0]*b[0][1]) + (a[1][1]*b[1][1]))%M;
- a[0][0] = a00;
- a[0][1] = a01;
- a[1][0] = a10;
- a[1][1] = a11;
- }
- void MatPower(ll a[2][2], ll n, ll mod)
- {
- if(n==0 || n==1) return;
- ll temp[2][2] = {{1,1},{1,0}};
- MatPower(a,n/2,mod);
- if(n%2==0) MatrixMul(a,a,mod);
- else
- {
- MatrixMul(a,a,mod);
- MatrixMul(a,temp,mod);
- }
- }
- ll power(ll a, ll n)
- {
- if(n==0) return 1;
- else if(n==1) return a;
- else
- {
- ll R = power(a,n/2);
- if(n%2==0) return R*R;
- else return R*a*R;
- }
- }
- int main()
- {
- fast;
- //read; write;
- ll t;
- cin>>t;
- rep(tc,1,t+1)
- {
- ll a,b,n,m;
- cin>>a>>b>>n>>m;
- ll fib[2][2] = {{1,1},{1,0}};
- ll mod = power(10,m);
- //DBG(mod);
- MatPower(fib,n-1,mod);
- ll ans = fib[0][0]*b + fib[0][1]*a;
- cout<<"Case "<<tc<<": "<< ans%mod <<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement