Solutions of Number counting - MarisaOJ: Marisa Online Judge

Solutions of Number counting

Select solution language

Write solution here.


User Avatar Raiden_Ei    Created at    0 likes

Ta dễ dàng thấy ở những vị trí mà i%3==0 thì sẽ có 4 chữ số thõa mãn, các vị trí còn lại sẽ có 3 chữ số thõa mãn. do đó ta tìm số lần xuất hiện các vị trí chia hết cho 3-đặt là k , và các vị trí còn lại- đặt là x. ta có kết quả sẽ là 3^x * 4^k; (3 mũ x nhân với 4 mũ k ) ở đây ta phải tạo một hàm tính mũ theo phương pháp lũy thừa nhị phân :> . sau đó tính kết quả thôi . tham khảo cách viết hàm mũ tại đây : https://blog.28tech.com.vn/luy-thua-nhi-phan Bên dưới sẽ là code để các bạn tham khảo :) : ```cpp #include <bits/stdc++.h> #define ll long long using namespace std; ll n,c; ll nhan(ll a,ll b) { if(b==0)return 0; if(b==1)return a; ll x=nhan(a,b/2); x=(x+x)%c; if(b&1)return (x+a)%c; else return x; } ll mu(ll a,ll b) { if(b==0)return 1; if(b==1)return a; ll x=mu(a,b/2); x=nhan(x,x); if(b&1)return nhan(x,a); else return x; } void input() { cin>>n; } void solve() { c=1e9+7; ll ans=1; ll k=n/3; ll x=2*k+n%3; ans=nhan(ans,mu(4,k)); ans=nhan(ans,mu(3,x)); cout<<ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); input(); solve(); return 0; }