社区讨论

这个代码样例可以过为什么测试点全过不了

P1002[NOIP 2002 普及组] 过河卒参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@lpky0ghc
此快照首次捕获于
2023/11/30 16:37
2 年前
此快照最后确认于
2023/11/30 20:10
2 年前
查看原帖
C
#include<stdio.h>
double factorial(int n) {
    if (n == 0) {
        return 1;
    }
    double result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

double Combination(int r, int n) {
    if (r > n) {
        return 0;
    }
    if (r == 0 || r == n) {
        return 1;
    }
    double result = factorial(n) / (factorial(r) * factorial(n - r));
    return result;
}
int main(){
	int x1,y1,x2,y2,s = 0;//1是马的坐标,2是B的坐标
	scanf("%d %d %d %d",&x2,&y2,&x1,&y1);
	s = Combination(x2,x2 + y2);
	s -= Combination(x1,x1+y1)*Combination(x2-x1,x2+y2-x1-y1);
	s -= Combination(x1-1,x1+y1)*Combination(x2-x1+1,x2+y2-x1-y1);
	s -= Combination(x1-2,x1+y1)*Combination(x2-x1+2,x2+y2-x1-y1);
	s -= Combination(x1+1,x1+y1)*Combination(x2-x1-1,x2+y2-x1-y1);
	s -= Combination(x1+2,x1+y1)*Combination(x2-x1-2,x2+y2-x1-y1);
	if((x1 - 2 <= 0&& y1 - 2 <= 0)||(x1-2 <= 0 && x1 + 2 >=x2)||(y1 - 2 <= 0 && y1 + 2 >= y2)){
		s = 0;
	}  
	else if((x1-2 <= 0 && x1 + 2 <x2)||(y1-2 <= 0 && y1 + 2 < y2)||(x1-2 > 0 && x1 + 2 >= x2)||(y1-2 > 0 && y1 + 2 >= y2)){
		s += Combination(x1-3,x1+y1-3) +Combination(y1-3,x1+y1-3) ;
	}
	else {
		s += Combination(x1-3,x1+y1-3) +Combination(y1-3,x1+y1-3)+ Combination(x1+2,x1+y1-1) +Combination(y1+2,x1+y1-1) ;
	}
	printf("%d",s);
	return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...