답안 #856486

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
856486 2023-10-03T16:28:46 Z MilosMilutinovic PIN (CEOI10_pin) C++14
90 / 100
347 ms 14700 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==3) ans+=cnt[str];
				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 7 ms 1116 KB Output is correct
2 Correct 7 ms 948 KB Output is correct
3 Correct 6 ms 948 KB Output is correct
4 Correct 78 ms 3224 KB Output is correct
5 Correct 102 ms 3928 KB Output is correct
6 Correct 115 ms 3664 KB Output is correct
7 Correct 92 ms 3408 KB Output is correct
8 Correct 108 ms 3960 KB Output is correct
9 Correct 191 ms 5504 KB Output is correct
10 Correct 270 ms 5896 KB Output is correct
11 Correct 124 ms 3920 KB Output is correct
12 Incorrect 250 ms 5648 KB Output isn't correct
13 Incorrect 155 ms 4260 KB Output isn't correct
14 Correct 146 ms 4000 KB Output is correct
15 Correct 258 ms 5460 KB Output is correct
16 Correct 174 ms 11052 KB Output is correct
17 Correct 303 ms 14640 KB Output is correct
18 Correct 285 ms 12324 KB Output is correct
19 Correct 295 ms 13648 KB Output is correct
20 Correct 347 ms 14700 KB Output is correct