P1014 数据有点水
  • 板块灌水区
  • 楼主monodev
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/6 16:30
  • 上次更新2023/11/3 11:19:05
查看原帖
P1014 数据有点水
533102
monodev楼主2023/7/6 16:30

P1014 [NOIP1999 普及组] Cantor 表

这道题按理来说需要分类讨论的(向上数或向下数)

但是数据中似乎只有向上数的测试点

导致用下面这段错误的代码也可以过

#include <iostream>
#include <cmath>
#define tiny 0.0000001
using namespace std;

double solve(double a, double b, double c){
	return (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
}
int sum(int n){
	return (n * n + n) / 2;
}
int row(int n){
	return ceil(solve(0.5, 0.5, -n) - tiny);
}
int main(){
	int N;
	cin >> N;
	cout << row(N) + 1 - N + sum(row(N) - 1) << '/' << N - sum(row(N) - 1);
}

正确做法AC Code(注意main()函数最后几行的差别):

#include <iostream>
#include <cmath>
#define tiny 0.0000001
using namespace std;

double solve(double a, double b, double c){
	return (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
}

int sum(int n){
	return (n * n + n) / 2;
}

int row(int n){
	return ceil(solve(0.5, 0.5, -n) - tiny);
}

int main(){
	int N;
	cin >> N;
	if(row(N) % 2)
		cout << row(N) + 1 - N + sum(row(N) - 1) << '/' << N - sum(row(N) - 1);
	else
		cout << N - sum(row(N) - 1) << '/' << row(N) + 1 - N + sum(row(N) - 1);
}
2023/7/6 16:30
加载中...