8h还是没人,求助
查看原帖
8h还是没人,求助
767561
Ascnbeta楼主2023/11/19 18:53

最后1点WA,输出0,应该是1

看昏头了也没看出怎么错了,重新理解考场代码真不容易qwq

思路挺简单,把所有可能情况枚举出来,然后一个个判断,最后输出符合条件的

#include <bits/stdc++.h>
using namespace std;
int n,p[10][7],pt[83][7];
bool pf[83];
bool cmp (int x[],int y[]) {
	return x[1] == y[1] && x[2] == y[2] && x[3] == y[3] && x[4] == y[4] && x[5] == y[5];
}
int main() {
	//freopen("lock.in","r",stdin);
	//freopen("lock.out","w",stdout);
	scanf("%d",&n);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= 5; j++) {
			scanf("%d",&p[i][j]);
		}
	}
	int mytemp = 1;
	for (int i = 1; i <= 81; i++) {
		for (int j = 1; j <= 5; j++) {
			pt[i][j] = p[1][j];
		}
	}
	for (int i = 1; i <= 5; i++) {
		for (int j = 1; j <= 9; j++) {
			if (pt[mytemp][i] + j < 10) {
				pt[mytemp][i] += j;
			}else{
				pt[mytemp][i] += j - 10;
			}
			mytemp++;
		}
	}
	for (int i = 1; i <= 4; i++) {
		for (int j = 1; j <= 9; j++) {
			if (pt[mytemp][i] + j < 10) {
				pt[mytemp][i] += j;
			}else{
				pt[mytemp][i] += j - 10;
			}
			if (pt[mytemp][i+1] + j < 10) {
				pt[mytemp][i+1] += j;
			}else{
				pt[mytemp][i+1] += j - 10;
			}
			mytemp++;
		}
	}
	for (int i = 2; i <= n; i++) {
		for (int j = 1; j <= 81; j++) {
			if (pf[j]) continue;
			if (cmp(pt[j],p[i])) {
				pf[j] = true;
				continue;
			}
			int te1 = 1e9,te2 = 1e9,tf = 0,tp1,tp2;
			if (pt[j][1] != p[i][1]){
				tf++;
				tp1 = 1;
				te1 = pt[j][1] - p[i][1];
			}
			if (pt[j][2] != p[i][2]){
				tf++;
				if (tf == 2) {
					tp2 = 2;
					te2 = pt[j][2] - p[i][2];
				}else{
					tp1 = 2;
					te1 = pt[j][2] - p[i][2];
				}
			}
			if (pt[j][3] != p[i][3]){
				tf++;
				if (tf == 2) {
					tp2 = 3;
					te2 = pt[j][3] - p[i][3];
				}else{
					tp1 = 3;
					te1 = pt[j][3] - p[i][3];
				}
			}
			if (pt[j][4] != p[i][4]){
				tf++;
				if (tf == 2) {
					tp2 = 4;
					te2 = pt[j][4] - p[i][4];
				}else{
					tp1 = 4;
					te1 = pt[j][4] - p[i][4];
				}
			}
			if (pt[j][5] != p[i][5]){
				tf++;
				if (tf == 2) {
					tp2 = 5;
					te2 = pt[j][5] - p[i][5];
				}else{
					tp2 = 5;
					te1 = pt[j][5] - p[i][5];
				}
			}
			if (tf > 2) {
				pf[j] = true;
				continue;
			}else if (tf == 2 && (te2 != te1 || abs(tp1 - tp2) != 1)) {
				pf[j] = true;
				continue;
			}
		}
	}
	int ans = 0;
	for (int i = 1; i <= 81; i++) {
		if(!pf[i]) {
			ans++;
		}
	}
	printf("%d",ans);
	return 0;
}
2023/11/19 18:53
加载中...