답안 #697174

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
697174 2023-02-08T17:25:37 Z bin9638 Raspad (COI17_raspad) C++17
61 / 100
6000 ms 43496 KB
#include<bits/stdc++.h>

using namespace std;
#define N  100010
#define ll long long
#define ii pair<int,int>
#define fs first
#define sc second
#define pb push_back
#define iii pair<int,ii>
#define int ll

int f[N],a[N][55],n,m;

struct haha
{
    int val=0,sum=0,sl=0,cnt[55]={},id[55]={},ktr[55]={};

    int get(int mod)
    {
        int res=0;
        for(int i=1;i<=m;i++)
            res=(res+f[i]%mod*id[i])%mod;
        return res;
    }

    void DFS(int u,int dem,int h)
    {
        ktr[u]=dem;
        if(ktr[u-1]==0&&a[h][u-1]==1)
            DFS(u-1,dem,h);
        if(ktr[u+1]==0&&a[h][u+1]==1)
            DFS(u+1,dem,h);
        for(int i=1;i<=m;i++)
            if(ktr[i]==0&&id[i]==id[u])
                DFS(i,dem,h);
    }

    void build(int h)
    {
        memset(cnt,0,sizeof(cnt));
        for(int i=1;i<=m;i++)
            if(id[i]!=0)
                cnt[id[i]]=1;
        int dem=m+1;
        for(int i=1;i<=m;i++)
            if(a[h][i]==0)
                id[i]=0;
                else{
                    if(id[i]==0)
                        id[i]=++dem;
                }
        for(int i=1;i<=m;i++)
            if(id[i]!=0&&id[i]<=m)
                cnt[id[i]]=0;
        for(int i=1;i<=m;i++)
            if(cnt[i]>0)
                sum+=sl;
        dem=0;
        memset(ktr,0,sizeof(ktr));
        for(int i=1;i<=m;i++)
            if(ktr[i]==0&&id[i]!=0)
            {
                dem++;
                DFS(i,dem,h);
            }
        for(int i=1;i<=m;i++)
            id[i]=ktr[i];
        val=get(1e9+8277)*1e9+get(1e9+9277);
    }

    int solve()
    {
        memset(cnt,0,sizeof(cnt));
         for(int i=1;i<=m;i++)
            if(id[i]!=0)
                cnt[id[i]]=1;
        int res=0;
        for(int i=1;i<=m;i++)
            if(cnt[i]!=0)
                res++;
        return res;
    }

    bool operator<(const haha&A)const
    {
        return val<A.val;
    }
};
vector<haha>s,luu;

int32_t main()
{
   // freopen("A.inp","r",stdin);
    //freopen("A.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        string s;
        cin>>s;
        s=" "+s;
        for(int j=1;j<=m;j++)
        {
            a[i][j]=(s[j]-'0');
          ///  cout<<i<<" "<<j<<" "<<a[i][j]<<endl;
        }
    }
    for(int i=1;i<=m;i++)
        f[i]=1ll*rand()*rand()*rand();
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        s.emplace_back();
        s.back().sl=1;
        for(int j=0;j<s.size();j++)
            s[j].build(i);
        sort(s.begin(),s.end());
        luu.clear();
        while(!s.empty())
        {
            haha cc=s.back();
            s.pop_back();
            if(!s.empty()&&s.back().val==cc.val)
            {
                s.back().sum+=cc.sum;
                s.back().sl+=cc.sl;
            }else
            {
                luu.pb(cc);
            }
        }
        s=luu;
        if(s.size()>m)
            return 0;
        for(auto cc:s)
            ans+=cc.sum+cc.solve()*cc.sl;
    }
    cout<<ans;
    return 0;
}

Compilation message

raspad.cpp: In function 'int32_t main()':
raspad.cpp:118:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<haha>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  118 |         for(int j=0;j<s.size();j++)
      |                     ~^~~~~~~~~
raspad.cpp:136:20: warning: comparison of integer expressions of different signedness: 'std::vector<haha>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
  136 |         if(s.size()>m)
      |            ~~~~~~~~^~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 3 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 2 ms 340 KB Output is correct
6 Correct 4 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 3 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 2 ms 340 KB Output is correct
6 Correct 4 ms 340 KB Output is correct
7 Correct 9 ms 724 KB Output is correct
8 Correct 1 ms 468 KB Output is correct
9 Correct 32 ms 724 KB Output is correct
10 Correct 7 ms 724 KB Output is correct
11 Correct 17 ms 788 KB Output is correct
12 Correct 27 ms 724 KB Output is correct
13 Correct 20 ms 760 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 85 ms 21848 KB Output is correct
2 Correct 264 ms 43372 KB Output is correct
3 Correct 480 ms 43372 KB Output is correct
4 Correct 138 ms 39064 KB Output is correct
5 Correct 69 ms 13244 KB Output is correct
6 Correct 299 ms 43496 KB Output is correct
7 Correct 436 ms 43420 KB Output is correct
8 Correct 230 ms 34892 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 3 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 2 ms 340 KB Output is correct
6 Correct 4 ms 340 KB Output is correct
7 Correct 9 ms 724 KB Output is correct
8 Correct 1 ms 468 KB Output is correct
9 Correct 32 ms 724 KB Output is correct
10 Correct 7 ms 724 KB Output is correct
11 Correct 17 ms 788 KB Output is correct
12 Correct 27 ms 724 KB Output is correct
13 Correct 20 ms 760 KB Output is correct
14 Correct 85 ms 21848 KB Output is correct
15 Correct 264 ms 43372 KB Output is correct
16 Correct 480 ms 43372 KB Output is correct
17 Correct 138 ms 39064 KB Output is correct
18 Correct 69 ms 13244 KB Output is correct
19 Correct 299 ms 43496 KB Output is correct
20 Correct 436 ms 43420 KB Output is correct
21 Correct 230 ms 34892 KB Output is correct
22 Correct 773 ms 34780 KB Output is correct
23 Correct 3766 ms 43416 KB Output is correct
24 Correct 3466 ms 43416 KB Output is correct
25 Correct 854 ms 43488 KB Output is correct
26 Correct 847 ms 43376 KB Output is correct
27 Correct 1045 ms 43400 KB Output is correct
28 Correct 2537 ms 43412 KB Output is correct
29 Correct 1515 ms 43396 KB Output is correct
30 Correct 554 ms 43372 KB Output is correct
31 Execution timed out 6099 ms 43468 KB Time limit exceeded
32 Halted 0 ms 0 KB -