Submission #850238

#TimeUsernameProblemLanguageResultExecution timeMemory
850238Tai_xiuSelotejp (COCI20_selotejp)C++14
70 / 110
1026 ms11504 KiB
#include <bits/stdc++.h>

using namespace std;
int n,m;
char a[1003][11];
vector<int>lt[1003],lt1[1003];
int dp[1003][1<<10],gt[1024][1024],val[1024];
void init()
{
    for (int i=0;i<(1<<m);i++){
          int tam=i;
          int cnt=0;
            if (tam&1)
                cnt++;
            for (int j=1;j<m;j++){
                if (((i>>j)&1) && (((i>>(j-1))&1)==0))
                    cnt++;
            }
        val[i]=cnt;
    }
    for (int i=0;i<(1<<m);i++){
        for (int j=0;j<(1<<m);j++){
            int tam=j,cnt=0;
            for (int k=0;k<m;k++){
                if (((i>>k)&1)==0 && ((j>>k)&1)==1){
                    cnt++;
                    tam^=(1<<k);
                }
            }
            gt[i][j]=val[tam]+cnt;
        }
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>n>>m;
    init();
   for (int i=0;i<=n;i++){
    for (int j=0;j<(1<<m);j++)
        dp[i][j]=1e9;
   }
    for (int i=1;i<=n;i++){
        for (int j=0;j<m;j++)
            cin>>a[i][j];
    }
    for (int i=0;i<m;i++)
        a[n+1][i]='.';
    for( int i=1;i<=n;i++){
        for (int j=0;j<(1<<m);j++){
              bool kt=true;
            for (int k=0;k<m;k++){
                if (((  j>>k)&1)==1 && a[i][k]=='.' )
                {
                    kt=false;
                    break;
                }
                if ((((j>>k)&1)==0) && a[i+1][k]=='.' && a[i][k]=='#'){
                    kt=false;
                    break;
                }
            }
            if (kt){
                lt[i].push_back(j);
                int tam=j;
                for (int k=0;k<m;k++){
                if (((j>>k)&1)==0 && a[i][k]=='.')
                    tam|=(1<<k);
                }
                lt1[i].push_back(tam);

            }
        }
    }
/*
    for (int i=1;i<=n;i++){
        for (int j:lt[i])
            cout<<j<<" ";
        cout<<endl;
    }

    10 11 14 15
    10 11 14 15
    2 3 6 7 10 11 14 15
    for (int i=2;i<=n;i++){
        for (int mask:lt[i]){
            for (int premask:)
        }
    }
   cout<<dp[n][(1<<m)-1];*/
   /*
   for (int i=1;i<=n;i++){
        for (int mask:lt[i]){
            int tam=mask;
            for (int j=0;j<m;j++){
                if (((mask>>j)&1)==0 && a[i][j]=='.')
                    tam|=(1<<j);
            }
            lt1[i].push_back(tam);
        }
   }*/
   /*
     for (int i=1;i<=n;i++){
        for (int j:lt1[i])
            cout<<j<<" ";
        cout<<endl;
    }*/
    for (int i=0;i<lt[1].size();i++){
        dp[1][lt1[1][i]]=val[lt[1][i]];
    }
    for (int i=2;i<=n;i++){
        for (int mask=0;mask<lt[i].size();mask++){
            for (int premask=0;premask<lt[i-1].size();premask++){
                dp[i][lt1[i][mask]]=min(dp[i][lt1[i][mask]],dp[i-1][lt1[i-1][premask]]+gt[lt1[i-1][premask]][lt[i][mask]]);
            }
        }
    }
    cout<<dp[n][(1<<m)-1];
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:110:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  110 |     for (int i=0;i<lt[1].size();i++){
      |                  ~^~~~~~~~~~~~~
Main.cpp:114:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  114 |         for (int mask=0;mask<lt[i].size();mask++){
      |                         ~~~~^~~~~~~~~~~~~
Main.cpp:115:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  115 |             for (int premask=0;premask<lt[i-1].size();premask++){
      |                                ~~~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...