제출 #1316561

#제출 시각아이디문제언어결과실행 시간메모리
1316561nambanana987나머지들의 합 (NOI12_modsum)C++20
25 / 25
0 ms448 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][2]; 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; //0: pre 1: cur int pre=0,cur=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){ dp[x][cur]=0; for(int j=0;j<=4;++j){ int prex= (x-j+5) %5; dp[x][cur]+=dp[prex][pre]*cnt[j][i]; } } pre^=1; cur^=1; } 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][pre]*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...