B站头图景深对焦效果

请在图片上左右移动鼠标查看效果

关于 Exawizards Programming Contest 2021 的小结

D - Between Two Arrays

Time Limit: 2 sec / Memory Limit: 1024 MB

Score : 400400 points

The portal

Editorial

The portal

#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!

 

 

 

posted @ 2021-10-10 09:00  acmWang  阅读(48)  评论(0)    收藏  举报
返回顶端

2021-09-22 (星期三)
09:08:39 +08:00