当前位置: 代码迷 >> 综合 >> POJ 3724 Find the parameter 二分
  详细解决方案

POJ 3724 Find the parameter 二分

热度:40   发布时间:2024-01-13 18:22:27.0
这道题可以说卡精度卡到了极致,比较时eps竟然开到10才AC的,让我试了十几次,实际上做商跟1比较是最好的方法。
/*
ID: sdj22251
PROG: calfflac
LANG: C++
*/
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cmath>
#include <ctime>
#define MAX 2000000000
#define LOCA
using namespace std;
int n, ans[11], v[11];
double x[21], y[21];
bool flag;
void dfs(int num, int q)
{int i, j;double sum;if(flag) return;if(num >= 10){for(i = 0; i < n; i++){sum = 0.0;for(j = 0; j < 10; j++)sum += exp(v[j] * x[i]);if(fabs(sum / y[i] - 1) > 0.0001)break;}if(i >= n){for(j = 0; j < 10; j++)ans[j] = v[j];flag = true;}return;}for(i = q; i <= 10; i++){v[num] = i;dfs(num + 1, i);}
}
int main()
{
#ifdef LOCALfreopen("calfflac.in","r",stdin);freopen("calfflac.out","w",stdout);
#endifint i;scanf("%d", &n);for(i = 0; i < n; i++)scanf("%lf%lf", &x[i], &y[i]);flag = false;dfs(0, 0);for(i = 0; i < 10; i++)printf("%d\n", ans[i]);return 0;
}

  相关解决方案