제출 #1316553

#제출 시각아이디문제언어결과실행 시간메모리
1316553nambanana987나머지들의 합 (NOI12_modsum)C++20
25 / 25
1 ms332 KiB
#include <bits/stdc++.h>
#include <climits>
using namespace std;
#define f first
#define s second
#define all(a) a.begin(),a.end()
#define sz(a) (int)a.size()
#define int long long
const int N=1e3+5;
pair<int,int>M[N];
int dp[7][N];
int cnt[7][N];
int res[7];
int cou_mod(int n,int x,int M){ // n mod x ==  M
    if(n<M)return 0;
    return (n-M)/x +1;
}
void solve(){
    int n;cin>>n;
    for(int i=1;i<=n;++i) cin>>M[i].f>>M[i].s;

    for(int i=1;i<=n;++i){
        for(int j=0;j<5;++j){
            cnt[j][i]=cou_mod(M[i].s,5,j)-cou_mod(M[i].f-1,5,j);
        }
    }
    dp[0][0]=1;
    //dp[x][i] : số cách tạo dãy M1 ->Mi sao cho sum % 5 = x
    for(int i=1;i<=n;++i){
        for(int x=0;x<=4;++x){
            for(int j=0;j<=4;++j){
                int pre= (x-j+5) %5;
                dp[x][i]+=dp[pre][i-1]*cnt[j][i];
            }
        }
    }
    res[0]=1;
    res[1]=4;
    res[2]=5;
    res[3]=5;
    res[4]=4;
    int ans=0;
    for(int i=0;i<=4;++i) ans+=dp[i][n]*res[i];
    cout<<ans;
}
signed main(){

    ios_base::sync_with_stdio(0);cin.tie(0);
    int T=1;
    while(T--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...