제출 #1303163

#제출 시각아이디문제언어결과실행 시간메모리
1303163Gadir_2880PIN (CEOI10_pin)C++20
100 / 100
52 ms15000 KiB
#include<bits/stdc++.h>
using namespace std;
#define debug(n,m) cout<<"["<<#n<<"]->"<<n<<m
#define int long long
#define all(x) x.begin(),x.end()
#define pb push_back
 
const int N=2e6+5;
const int mod=1e9+7;
const int inf=2e9;

int dp[37][37][37][37];

int pos[256];

void levi() {
  int n,nd;
  cin>>n>>nd;
  int tim=0;
  for (char c='0';c<='9';++c) {
    pos[c]=tim++;
  } 
  for (char c='a';c<='z';++c) {
    pos[c]=tim++;
  } 
  for (int i=1;i<=n;++i) {
    string s;
    cin>>s;
    for (int j=0;j<16;++j) {
      vector<int> id={36,36,36,36};
      for (int l=0;l<4;++l) {
        if (j&(1<<l)) id[l]=pos[s[l]];
        //debug(pos[s[l]],'\n');
      }
      ++dp[id[0]][id[1]][id[2]][id[3]];
    }
  } 
  nd=4-nd;
  vector<int> su(5,0);
  for (int i=0;i<16;++i) {
    int res=0;
    int d=__builtin_popcount(i);
    vector<int> id;
    for (int j=0;j<4;++j) {
      if (i&(1<<j)) id.pb(j); 
    }
    if (d==0) {
      int cu=dp[36][36][36][36];
      res+=(cu*(cu-1)/2);
    }
    else if (d==1) {
      for (int c=0;c<tim;++c) {
        vector<int> pu={36,36,36,36};
        pu[id[0]]=c;
        int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]];
        res+=(cu*(cu-1)/2);
      } 
    }
    else if (d==2) {
      for (int c=0;c<tim;++c) {
        for (int c2=0;c2<tim;++c2) {
          vector<int> pu={36,36,36,36};
          pu[id[0]]=c;
          pu[id[1]]=c2;
          int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]];
          res+=(cu*(cu-1)/2);
        } 
      } 
    }
    else if (d==3) {
      for (int c=0;c<tim;++c) {
        for (int c2=0;c2<tim;++c2) {
          for (int c3=0;c3<tim;++c3) {
          vector<int> pu={36,36,36,36};
            pu[id[0]]=c;
            pu[id[1]]=c2;
            pu[id[2]]=c3;
            int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]];
            res+=(cu*(cu-1)/2);
          } 
        } 
      } 
    }
    else {
      for (int c=0;c<tim;++c) {
        for (int c2=0;c2<tim;++c2) {
          for (int c3=0;c3<tim;++c3) {
            for (int c4=0;c4<tim;++c4) {
            vector<int> pu={36,36,36,36};
              pu[id[0]]=c;
              pu[id[1]]=c2;
              pu[id[2]]=c3;
              pu[id[3]]=c4;
              int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]];
              res+=(cu*(cu-1)/2);
            } 
          } 
        } 
      } 
    }
    su[d]+=res;
  }
  vector<int> res(5,0);
  res[0]=su[0]-su[1]+su[2]-su[3]+su[4];
  res[1]=su[1]-2*su[2]+3*su[3]-4*su[4];
  res[2]=su[2]-3*su[3]+6*su[4];
  res[3]=su[3]-4*su[4];
  res[4]=su[4];
  cout<<res[nd]<<'\n';
}

int32_t main() {
  // freopen("sumdiv.in","r",stdin);
  // freopen("sumdiv.out","w",stdout);
  ios_base::sync_with_stdio(0);
  cin.tie(0);int tt=1;//cin>>tt;
  while(tt--)levi();
}
#Verdict Execution timeMemoryGrader output
Fetching results...