답안 #1008474

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1008474 2024-06-26T13:05:52 Z ASN49K Skyscraper (JOI16_skyscraper) C++14
100 / 100
111 ms 5204 KB
#include <bits/stdc++.h>
#define pb      push_back
#define all(x)  x.begin(),x.end()
using namespace std;
using i64 =long long;
#define int long long
const int mod=1e9+7;
const int inf=1e9;
const int N=100;
const int L=1'000;
int dp[2][N+2][L+1][3];
//nr de vecini liberi
void add_self(int& x,int y)
{
    x+=y;
    x%=mod;
}
int add(int x,int y)
{
    return (x+y)%mod;
}
int prod(int x,int y)
{
    return (1LL*x*y)%mod;
}
main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,l;
    cin>>n>>l;
    if(n==1)
    {
        cout<<1<<'\n';
        return 0;
    }
    vector<int>a(n);
    for(auto &c:a)
    {
        cin>>c;
    }
    sort(all(a));
    a.pb(10000);
    dp[1][0][0][0]=1;
    for(int i=0;i<n;i++)
    {
        for(int j=1;j<=i+1;j++)
        {
            for(int cost=0;cost<=l;cost++)
            {
                for(int m=0;m<=2;m++)
                {
                    int& rez=dp[i&1][j][cost][m];
                    rez=0;

                    int old_cost=cost-(2*j-m)*(a[i+1]-a[i]);
                    if(old_cost<0)
                    {
                        continue;
                    }
                    //unim 2 comp
                    if(i==n-1)
                    {
                        add_self(rez , dp[(i&1)^1][j+1][old_cost][m]);
                    }
                    else
                    {
                        add_self(rez , prod((j+1-m)*j, dp[(i&1)^1][j+1][old_cost][m]));
                    }

                    //adaugam la un capat unei comp
                    //e capat
                    if(m>0)
                    {
                        //aici de gandit coef

                        if(m==1)add_self(rez , prod(2*j , dp[(i&1)^1][j][old_cost][m-1]));
                        else if(i==n-1)add_self(rez , dp[(i&1)^1][j][old_cost][m-1]);
                        else if(j>1)add_self(rez , prod(j-1 , dp[(i&1)^1][j][old_cost][m-1]));
                    }
                    add_self(rez , prod(2*j-m , dp[(i&1)^1][j][old_cost][m]));

                    //adaugam o noua componenta
                    add_self(rez , dp[(i&1)^1][j-1][old_cost][m]);
                    if(m>0)
                    {
                        add_self(rez , (3-m)*dp[(i&1)^1][j-1][old_cost][m-1]);
                    }
                }
            }
        }
        if(i==0)dp[1][0][0][0]=0;
    }
    int rez=0;
    for(int i=0;i<=l;i++)
    {
        add_self(rez , dp[(n&1)^1][1][i][2]);
    }
    cout<<rez;
}

Compilation message

skyscraper.cpp:26:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   26 | main()
      | ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 2 ms 604 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 604 KB Output is correct
10 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 612 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 0 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
6 Correct 0 ms 604 KB Output is correct
7 Correct 0 ms 604 KB Output is correct
8 Correct 0 ms 604 KB Output is correct
9 Correct 1 ms 604 KB Output is correct
10 Correct 0 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 2 ms 604 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 604 KB Output is correct
10 Correct 1 ms 344 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 612 KB Output is correct
13 Correct 0 ms 604 KB Output is correct
14 Correct 0 ms 604 KB Output is correct
15 Correct 0 ms 604 KB Output is correct
16 Correct 0 ms 604 KB Output is correct
17 Correct 0 ms 604 KB Output is correct
18 Correct 0 ms 604 KB Output is correct
19 Correct 1 ms 604 KB Output is correct
20 Correct 0 ms 604 KB Output is correct
21 Correct 1 ms 860 KB Output is correct
22 Correct 91 ms 3880 KB Output is correct
23 Correct 111 ms 4948 KB Output is correct
24 Correct 101 ms 4684 KB Output is correct
25 Correct 110 ms 5072 KB Output is correct
26 Correct 100 ms 5204 KB Output is correct
27 Correct 33 ms 2396 KB Output is correct
28 Correct 45 ms 2520 KB Output is correct
29 Correct 80 ms 3820 KB Output is correct
30 Correct 95 ms 4944 KB Output is correct