Submission #375718

# Submission time Handle Problem Language Result Execution time Memory
375718 2021-03-09T20:45:21 Z YJU PIN (CEOI10_pin) C++14
80 / 100
1000 ms 11956 KB
#include<bits/stdc++.h>
#pragma GCC optimize("unroll-loops,no-stack-protector,Ofast")
using namespace std;
typedef int ll;
typedef long double ld;
typedef pair<ll,ll> pll;
const ll MOD=1e9+9;
const ll MOD2=998244353;
const ll N=5e4+5;
const ld pi=acos(-1);
#define SQ(i) ((i)*(i))
#define REP(i,n) for(ll i=0;i<n;i++)
#define REP1(i,n) for(ll i=1;i<=n;i++)
#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define setp setprecision
#define lwb lower_bound
#define SZ(_a) (ll)_a.size()
#define count(_a) (ll)__builtin_popcount(_a)

ll n,d,ans=0,v[N][4];
string s;

ll id[N],cnt[N],dp[16],pre[16];
unordered_map<ll,ll> mm[N];

ll num(char c){
	return ((c>='0'&&c<='9')?c-'0':10+c-'a');
}

int main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	cin>>n>>d;
	REP(i,n){
		cin>>s;
		REP(j,4)v[i][j]=num(s[j]);
	}
	for(ll mask=0;mask<(1<<4);++mask){
		if(count(mask)!=d)continue;
		vector<ll> vid;
		REP(i,n){
			id[i]=0;
			REP(j,4)if(!((mask>>j)&1)){
				id[i]=id[i]*36+v[i][j];
			}
			vid.pb(id[i]);
		}
		sort(vid.begin(),vid.end());
		vid.erase(unique(vid.begin(),vid.end()),vid.end());
		REP(i,n){
			id[i]=lwb(vid.begin(),vid.end(),id[i])-vid.begin();
			memset(dp,0,sizeof(dp));
			for(int j=0,P=1;j<4;j++,P*=37)pre[(1<<j)]=P*((mask>>j)&1?v[i][j]+1:0);
			for(ll bit=0;bit<(1<<4);++bit){
				dp[bit]=dp[bit-(bit&-bit)]+pre[(bit&-bit)];
				if((bit|mask)>mask)continue;
				ll val=dp[bit];
				if(count(bit)&1){
					ans-=mm[id[i]][val];
					++mm[id[i]][val];
				}else{
					ans+=mm[id[i]][val];
					++mm[id[i]][val];
				}
			}
		}
		REP(i,n){
			mm[id[i]].clear();
		}
	}
	cout<<ans<<"\n";
	return 0;
}

# Verdict Execution time Memory Grader output
1 Correct 5 ms 3308 KB Output is correct
2 Correct 8 ms 3308 KB Output is correct
3 Correct 6 ms 3436 KB Output is correct
4 Correct 41 ms 4892 KB Output is correct
5 Correct 50 ms 5128 KB Output is correct
6 Correct 98 ms 5100 KB Output is correct
7 Correct 66 ms 4844 KB Output is correct
8 Correct 55 ms 5248 KB Output is correct
9 Correct 88 ms 6716 KB Output is correct
10 Correct 202 ms 7080 KB Output is correct
11 Correct 93 ms 5228 KB Output is correct
12 Correct 485 ms 7092 KB Output is correct
13 Correct 204 ms 5648 KB Output is correct
14 Correct 493 ms 5624 KB Output is correct
15 Execution timed out 1092 ms 7672 KB Time limit exceeded
16 Correct 87 ms 6988 KB Output is correct
17 Correct 247 ms 9820 KB Output is correct
18 Execution timed out 1085 ms 10896 KB Time limit exceeded
19 Execution timed out 1098 ms 11444 KB Time limit exceeded
20 Execution timed out 1087 ms 11956 KB Time limit exceeded