답안 #856482

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
856482 2023-10-03T16:25:56 Z MilosMilutinovic PIN (CEOI10_pin) C++14
90 / 100
350 ms 14820 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;
			}
			if(d==1){
				if(pc==2) ans-=2*cnt[str];
				if(pc==1) 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;
}

/*
4 1
0000
a010
0202
a0e2

4 2
0000
a010
0202
a0e2
*/

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);
      |                        ~~~~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 1112 KB Output is correct
2 Correct 7 ms 872 KB Output is correct
3 Correct 6 ms 860 KB Output is correct
4 Correct 74 ms 3380 KB Output is correct
5 Correct 92 ms 3856 KB Output is correct
6 Correct 111 ms 3628 KB Output is correct
7 Correct 94 ms 3412 KB Output is correct
8 Correct 108 ms 3924 KB Output is correct
9 Correct 171 ms 5288 KB Output is correct
10 Correct 228 ms 5700 KB Output is correct
11 Correct 121 ms 3756 KB Output is correct
12 Incorrect 207 ms 5456 KB Output isn't correct
13 Incorrect 131 ms 4064 KB Output isn't correct
14 Correct 142 ms 3924 KB Output is correct
15 Correct 276 ms 5644 KB Output is correct
16 Correct 158 ms 11092 KB Output is correct
17 Correct 293 ms 14788 KB Output is correct
18 Correct 266 ms 12552 KB Output is correct
19 Correct 292 ms 13552 KB Output is correct
20 Correct 350 ms 14820 KB Output is correct