关于 Exawizards Programming Contest 2021 的小结
D - Between Two Arrays
Time Limit: 2 sec / Memory Limit: 1024 MB
Score : 400400 points
Editorial
#include <iostream> #include <vector> #include "atcoder/modint.hpp" using namespace std; using mint = atcoder::modint998244353; #define rep(i, n) for (int i = 0; i < (n); i++) int main() { int N; cin >> N; vector<int> A(N), B(N); for (auto& x : A) cin >> x; for (auto& x : B) cin >> x; int MAX = 3000; vector dp(vector(N + 1, vector(MAX + 1, mint{0}))); dp[0][0] = 1; rep(i, N + 1) { rep(j, MAX) dp[i][j + 1] += dp[i][j]; if (i != N) { for (int j = A[i]; j <= B[i]; j++) dp[i + 1][j] += dp[i][j]; } } cout << dp[N][MAX].val() << "\n"; }
The esoteric papers don't understand !
others
#include<bits/stdc++.h> using namespace std; long long n,a[3010],b[3010],fz=998244353,ans,dp[3010][3010],sum[3010][3010]; int main() { ios::sync_with_stdio(false); cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } for(int i=1;i<=n;i++) { cin>>b[i]; } for(int j=a[1];j<=b[1];j++) { dp[1][j]=1; sum[1][j]=sum[1][j-1]+dp[1][j]; } for(long long i=2;i<=n;i++) { for(long long j=a[i];j<=b[i];j++) { dp[i][j]=sum[i-1][min(j,b[i-1])]; sum[i][j]=sum[i][j-1]+dp[i][j]; sum[i][j]%=fz; } } cout<<sum[n][b[n]]; return 0; }
I don't understand why he uses a two-dimensional array!
mine
// D - Between Two Arrays #include <iostream> #include <cstring> using namespace std; const int maxn = 2e+3; int main(){ long int n; cin >> n; long int a[maxn], b[maxn], s1[maxn], s2[maxn]; for (int i = 0; i < n;i++){ cin >> a[i]; cin >> b[i]; } long long int r1 = 1, r2 = 1; long long int cnta = 0, cntb = 0; for (int i = 1; i < n;i++){ for (int j = 1; j < n-1;j++){ s1[j] = a[i] - a[i - 1]; r1 *= s1[j]; } } cout << r1 << endl; for (int i = 1; i < n;i++){ for (int j = 0; j < n-1;j++){ s2[j] = a[i] - a[i - 1]; r2 *= s2[j]; } } cout << r2 << endl; cout << r1 + r2 << endl; return 0; }
It's purely a misinterpretation of the meaning of the problem!
本文来自博客园,作者:小白兔奶糖, 侵权必究!!!