社区讨论
这个代码样例可以过为什么测试点全过不了
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 条回复,欢迎继续交流。
正在加载回复...