BZOJ4689 Find the Outlier


Description

Abacus教授刚刚完成了一个制作数表的计算引擎的设计。它被设计用于同时计算一个多项式在许多点的取值。例如对于多项式 f(x)=x^2+2x+1 ,一种可能的计算结果是 f(0)=1,f(1)=4,f(2)=9.f(3)=16,f(4)=25 。不幸的是,引擎存在一个故障使得计算出的值总有一个是错的,例如对于上述多项式,它可能输出 1,4,12,16,25 而不是 1,4,9,16,25 。请你帮教授找出发生故障的是哪个点值。

Input

输入包含多组测试数据。

每组数据第一行包含一个正整数 d 表示多项式的度数,即多项式最高次项的项数,保证 d≤5 。

接下来 d+3 行,每行一个实数,第 i 行表示输出的 f(i) 的值,保证-100.0≤f(i)≤100.0 。

你可以认为恰好只有一个点值出故障,且与实际值的误差超过 1.0 。

由于不可避免的误差,其他数字与精确值的误差不超过10^(-6) 。

输入以一个零作为结束。

Output

对于每组数据,输出一个非负整数 i 表示 f(i) 的值发生故障。

Sample Input

2

1.0

4.0

12.0

16.0

25.0

1

-30.5893962764

5.76397083962

39.385379805

74.3727663177

4

42.4715310246

79.5420238202

28.0282396675

-30.3627807522

-49.8363481393

-25.5101480106

7.58575761381

5

-21.9161699038

-48.469304271

-24.3188578417

-2.35085940324

-9.70239202086

-47.2709510623

-93.5066246072

-82.5073836498

0

Sample Output

2

1

1

6


乍一看以为是差值

细细一想没有给出x?

定睛观察发现给出了点值和对应的x

然后笑嘻嘻的开始写差值

结果又细细一想

woc,这不是个高斯消元吗?

关于系数的高斯消元!!!

然后就裸了

就是被精度卡了一下

还有一个特别坑的是题目中的是从x=0开始给的


#include<bits/stdc++.h>
using namespace std;
#define N 10
#define eps 1e-3
double p[N],a[N][N];
void Guass(int n,double g[N][N]){
for(int i=1;i<=n;i++){
int p=0;
for(int j=i;j<=n;j++)
if(g[j][i]>eps){p=j;break;}
for(int j=1;j<=n+1;j++)swap(g[p][j],g[i][j]);
double d=g[i][i];
for(int j=1;j<=n+1;j++)g[i][j]/=d;
for(int j=1;j<=n;j++){
if(i==j)continue;
double w=g[j][i];
for(int k=1;k<=n+1;k++)
g[j][k]-=g[i][k]*w;
}
}
}
double fast_pow(double a,int b){
double ans=1.0;
while(b){
if(b&1)ans*=a;
b>>=1;
a*=a;
}
return ans;
}
bool check(int pos,int n){
static bool vis[N];
memset(vis,0,sizeof(vis));
vis[pos]=1;
int cnt=0;
for(int i=0;i<=n+1;i++){
if(i==pos)continue;
cnt++;vis[i]=1;
for(int j=1;j<=n;j++)a[cnt][j]=fast_pow((double)i,j-1);
a[cnt][n+1]=p[i];
if(cnt==n)break;
}
Guass(n,a);
for(int i=0;i<=n+1;i++){
if(vis[i])continue;
double res=0;
for(int j=1;j<=n;j++)res+=a[j][n+1]*fast_pow((double)i,j-1);
if(fabs(res-p[i])>eps)return 0;
}
return 1;
}
int main(){
int n;
while(1){
scanf("%d",&n);
if(!n)return 0;
n++;//实际上是n+1个变量
for(int i=0;i<=n+1;i++)scanf("%lf",&p[i]);//f[0]~f[n+1]
int ans=0;
for(int i=0;i<=n+1;i++)
if(check(i,n)){ans=i;break;}
printf("%d\n",ans);
}
return 0;
}

BZOJ4689 Find the Outlier 【高斯消元】*的更多相关文章

  1. UVALive - 6185 Find the Outlier暴力填表+高斯消元+卡eps

    https://cn.vjudge.net/problem/UVALive-6185 我真的是服了orz eps 1e5,1e6过不了 开1e2 1e1都能过 题意:给你一个d阶多项式f的f(0),f ...

  2. 【枚举】【高斯消元】Gym - 101412D - Find the Outlier

    给你一个未知的d次多项式在0,1,...,d+2处的取值,其中有且只有一个是错的,问你哪个是错的. 枚举哪个是错的,再在剩下的d+2个中取d+1个高斯消元,解出多项式系数,然后代一下最后剩下的那个数看 ...

  3. 【BZOJ-3143】游走 高斯消元 + 概率期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2264  Solved: 987[Submit][Status] ...

  4. 【BZOJ-3270】博物馆 高斯消元 + 概率期望

    3270: 博物馆 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 292  Solved: 158[Submit][Status][Discuss] ...

  5. *POJ 1222 高斯消元

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9612   Accepted: 62 ...

  6. [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...

  7. hihoCoder 1196 高斯消元·二

    Description 一个黑白网格,点一次会改变这个以及与其连通的其他方格的颜色,求最少点击次数使得所有全部变成黑色. Sol 高斯消元解异或方程组. 先建立一个方程组. \(x_i\) 表示这个点 ...

  8. BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基

    [题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...

  9. SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元

    [题目分析] Matrix-Tree定理+高斯消元 求矩阵行列式的值,就可以得到生成树的个数. 至于证明,可以去看Vflea King(炸树狂魔)的博客 [代码] #include <cmath ...

随机推荐

  1. 用if写一个备份mysql的脚本

    #!/bin/bash # 备份数据库 BAK_DIR=/data/backup/`date +%Y%m%d` MYSQLDB=dexin MYSQLUSER=root MYSQLPW=123456 ...

  2. cglib动态代理(需导入cglib-nodep-2.1_3.jar)

    public interface AnimalInterface { public void cry(); } public class AnimalImpl implements AnimalInt ...

  3. nyoj744——异或(sb题)

    蚂蚁的难题(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 小蚂蚁童鞋最近迷上了位运算,他感觉位运算非常神奇.不过他最近遇到了一个难题: 给定一个区间[a,b] ...

  4. word2016_添加标题和目录

    标题 开始->标题(层级可选) 目录 引用->目录->自动目录

  5. JavaScript--跨域

    跨域 什么是跨域? 跨域请求就是不同域的网站之间的文件数据之间的传送 ,由于浏览器的同源策略机制(基于安全,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性)Ajax直接请求普通 ...

  6. Python中面向对象的一些关于私有变量和继承的理解

    成员可见性,变量和方法的可见性.使用“__”开头的变量和方法为私有变量和方法 class Student(): def __init__(self, name, age): # 构造函数 # 初始化变 ...

  7. 初次使用Bootstrap

    一.概述也好,过程也好,反正就是这样 知道这个还是从群里听到的,一个人的视野是有限,必须借助他人来扩展.好奇使我去搜索了解了一下.原来是一个网页前端框架,可以适合不同大小屏幕,自动适应正常显示.这就是 ...

  8. ASP.NET网站使用Kindeditor富文本编辑器配置步骤

    1. 下载编辑器 下载 KindEditor 最新版本,下载页面: http://www.kindsoft.net/down.php 2. 部署编辑器 解压 kindeditor-x.x.x.zip ...

  9. 集成xadmin源码到项目的正式姿势

    xadmin是强大的,但是为了更好的后期定制开发,可能会修改到xadmin的源码. 因此还是推荐将xadmin源码集成到自己的项目中. 1.pip install xadmin 安装xadmin的模块 ...

  10. 12.18 微信扫码获取openid与登陆

    官方文档: https://open.weixin.qq.com/ 1.先获取code 1-1 配置项目配置文件 wechat: mpAppId: wxd898fcb01713c658 mpAppSe ...