답안 #856484

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
856484 2023-10-03T16:27:01 Z MilosMilutinovic PIN (CEOI10_pin) C++14
60 / 100
298 ms 14796 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;
			}
			if(d==0){
				assert(false);
			}
			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 1112 KB Output is correct
2 Correct 7 ms 856 KB Output is correct
3 Runtime error 1 ms 604 KB Execution killed with signal 6
4 Correct 76 ms 3428 KB Output is correct
5 Correct 95 ms 3664 KB Output is correct
6 Correct 113 ms 3652 KB Output is correct
7 Correct 90 ms 3412 KB Output is correct
8 Correct 111 ms 4104 KB Output is correct
9 Correct 173 ms 5460 KB Output is correct
10 Correct 230 ms 5720 KB Output is correct
11 Correct 127 ms 3920 KB Output is correct
12 Incorrect 215 ms 5456 KB Output isn't correct
13 Incorrect 132 ms 4260 KB Output isn't correct
14 Runtime error 2 ms 604 KB Execution killed with signal 6
15 Runtime error 3 ms 764 KB Execution killed with signal 6
16 Correct 169 ms 11240 KB Output is correct
17 Correct 298 ms 14796 KB Output is correct
18 Runtime error 2 ms 860 KB Execution killed with signal 6
19 Runtime error 3 ms 860 KB Execution killed with signal 6
20 Runtime error 3 ms 860 KB Execution killed with signal 6