zoukankan      html  css  js  c++  java
  • bzoj 4689: Find the Outlier

    数据不大,枚举哪个式子错了,对剩下的d+2个式子随意选d+1个高斯消元,然后代入剩下的式子检查是否正确,正确就是那一个式子错了

    #include<bits/stdc++.h>
    #define il inline
    #define vd void
    typedef long long ll;
    il int gi(){
    	int x=0,f=1;
    	char ch=getchar();
    	while(!isdigit(ch)){
    		if(ch=='-')f=-1;
    		ch=getchar();
    	}
    	while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    	return x*f;
    }
    #define eps 1e-3
    double s[11][11];
    double S[11];
    il vd work(int n){
    	for(int i=1;i<=n;++i){
    		int t=0;
    		for(int j=i;j<=n;++j)if(fabs(s[i][j])>eps)t=j;
    		std::swap(s[t],s[i]);
    		for(int j=i+1;j<=n;++j){
    			if(fabs(s[j][i])<eps)continue;
    			for(int k=n+1;k>=i;--k)s[j][k]=s[j][k]*s[i][i]/s[j][i]-s[i][k];
    		}
    	}
    	for(int i=n;i;--i){
    		s[i][n+1]/=s[i][i];
    		for(int j=1;j<i;++j)s[j][n+1]-=s[j][i]*s[i][n+1];
    	}
    }
    int main(){
    #ifndef ONLINE_JUDGE
    	freopen("4689.in","r",stdin);
    	freopen("4689.out","w",stdout);
    #endif
    	int d;
    	while(scanf("%d",&d),d){
    		for(int i=1;i<=d+3;++i)	scanf("%lf",&S[i]);
    		for(int i=1;i<=d+3;++i){
    			int j=i==1?2:1,cnt=0;
    			for(int k=2;k<=d+3;++k)
    				if(k!=i&&k!=j){
    					++cnt;
    					for(int l=1;l<=d+1;++l)s[cnt][l]=pow(k-1,l-1);
    					s[cnt][d+2]=S[k];
    				}
    			work(d+1);
    			double sum=0;
    			for(int k=1;k<=d+1;++k)sum+=s[k][d+2]*pow(j-1,k-1);
    			//printf("%d %.6lf %.6lf
    ",i,sum,S[j]);
    			if(fabs(sum-S[j])<eps)printf("%d
    ",i-1);
    		}
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    Oracle 11g R2(11.2.0.4.0)+udev搭建RAC
    在 Linux 中用 nmcli 命令绑定多块网卡
    linux 配置聚合连接team(网卡绑定) , systemd 控制
    7.linux目录结构
    6.VMware备份linux操作系统
    5.linux关机和切换运行模式
    4.linux安装
    linux网络配置知识
    3.Virtual Box的安装
    2.vmWare安装
  • 原文地址:https://www.cnblogs.com/xzz_233/p/9739753.html
Copyright © 2011-2022 走看看