Submission #856481

# Submission time Handle Problem Language Result Execution time Memory
856481 2023-10-03T16:25:00 Z MilosMilutinovic PIN (CEOI10_pin) C++14
90 / 100
335 ms 14828 KB
#include <bits/stdc++.h>

#define pb push_back
#define fi first
#define se second
#define mp make_pair

using namespace std;

typedef long long ll;
typedef pair<int,int> pii;

int readint(){
	int x=0,f=1; char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}

int n,d;
char s[50005][4];

int main(){
	scanf("%d%d",&n,&d); d=4-d;
	for(int i=1;i<=n;i++) scanf("%s",s+i);
	map<string,int> cnt;
	long long ans=0;
	for(int i=1;i<=n;i++){
		for(int mask=(1<<4)-1;mask>=0;mask--){
			int pc=__builtin_popcount(mask);
			if(pc<d) continue;
			string str="";
			for(int j=0;j<4;j++) if(mask>>j&1) str+=s[i][j]; else str+='*';
			if (d==4){
				ans+=cnt[str];
				continue;
			}
			if (d==3){
				if(pc==4) ans-=4*cnt[str];
				if(pc==3) ans+=cnt[str];
				continue;
			}
			if(d==2){
				if(pc==3) ans-=3*cnt[str];
				if(pc==2) ans+=cnt[str];
				continue;
			}
			ans+=cnt[str]*(d%2==pc%2?1:-1);
		}
		for(int mask=0;mask<(1<<4);mask++){
			string str="";
			for(int j=0;j<4;j++) if(mask>>j&1) str+=s[i][j]; else str+='*';
			cnt[str]+=1;
		}
	}
	printf("%lld\n",ans);
	return 0;
}

Compilation message

pin.cpp: In function 'int main()':
pin.cpp:25:32: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'char (*)[4]' [-Wformat=]
   25 |  for(int i=1;i<=n;i++) scanf("%s",s+i);
      |                               ~^  ~~~
      |                                |   |
      |                                |   char (*)[4]
      |                                char*
pin.cpp:24:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   24 |  scanf("%d%d",&n,&d); d=4-d;
      |  ~~~~~^~~~~~~~~~~~~~
pin.cpp:25:29: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |  for(int i=1;i<=n;i++) scanf("%s",s+i);
      |                        ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 6 ms 1116 KB Output is correct
2 Correct 8 ms 860 KB Output is correct
3 Correct 6 ms 856 KB Output is correct
4 Correct 75 ms 3408 KB Output is correct
5 Correct 95 ms 3688 KB Output is correct
6 Correct 120 ms 4044 KB Output is correct
7 Correct 95 ms 3332 KB Output is correct
8 Correct 106 ms 4072 KB Output is correct
9 Correct 177 ms 5452 KB Output is correct
10 Correct 234 ms 5872 KB Output is correct
11 Correct 120 ms 3920 KB Output is correct
12 Incorrect 248 ms 5456 KB Output isn't correct
13 Incorrect 163 ms 4140 KB Output isn't correct
14 Correct 146 ms 4224 KB Output is correct
15 Correct 251 ms 5640 KB Output is correct
16 Correct 167 ms 11328 KB Output is correct
17 Correct 307 ms 14676 KB Output is correct
18 Correct 254 ms 12092 KB Output is correct
19 Correct 294 ms 13596 KB Output is correct
20 Correct 335 ms 14828 KB Output is correct