离奇情况求调
  • 板块灌水区
  • 楼主TheRangerNick
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/8/22 11:24
  • 上次更新2024/8/22 14:36:09
查看原帖
离奇情况求调
1070264
TheRangerNick楼主2024/8/22 11:24

题目

首先贴上代码

#include <bits/stdc++.h>
using namespace std;
const int M = 10;
int n, a[M][6], ans;
int f[6];
int difence[M];
int g(int x, int y) {
	return (x <= y) ? (y - x) : (10 - x + y);
}
bool calc(int x) {
	int cnt = 0;
	for (int i = 1; i <= 5; ++ i )
		if (f[i] != a[x][i])
			difence[++cnt] = i;
	if ((!cnt)||cnt > 2) 
		return false;
	if (cnt == 1) 
		return true;
	if (abs(difence[1] - difence[2]) != 1) 
		return false;
	return (g(f[difence[1]], a[x][difence[1]]) == g(f[difence[2]], a[x][difence[2]]));
}
bool check() {
	for (int i = 1; i <= n; ++ i )
		if (!calc(i))
			return false;
	return true;
}
void dfs(int u) {
	if (u > 5) {
		ans += check();
		return;
	}
	for (int i = 0; i < 10; ++ i ) {
		f[u] = i;
		dfs(u + 1);
	}
	return;
}
int main(void) {
	scanf("%d",&n);
	for (int i = 1; i <= n; ++ i )
		for (int j = 1; j <= 5; ++ j )
			scanf("%d",&a[i][j]);
	dfs(1);
	printf("%d",ans);
	return 0;
}

其实以上大部分代码无关紧要,要命的是这几行:

if ((!cnt)||cnt > 2) //⑴
	return false;
if (cnt == 1) 
	return true;
if (abs(difence[1] - difence[2]) != 1) //⑵
	return false;

注意到,⑴处和⑵处都返回 false

所以按理来说,可以写成如下形式:

	if ((!cnt)||cnt > 2||(abs(difence[1] - difence[2]) != 1)) 
		return false;
	if (cnt == 1) 
		return true;

结果这是改之前,这是改之后

求dalao指导 这是怎么回事

2024/8/22 11:24
加载中...