1.double必须用double的输出(“%lf”)
我还以为是什么bug。。
2.sqrt,pow只要include cmath之后就能用了,我·pow()没有devc艹的提示,还以为我记错·了·,早知道运行一下了
cnm公式写错了
#include <iostream>
#include <cstdlib>
#include <bits/stdc++.h>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=12,NN=100002;
//int n,m,temp1,temp2,v[N];
//vector<int> ljb;
int n,k,vx[N],v[NN][N];
struct shu
{
int v1[N];int sim;int seq;int rk;
} ve[NN];
bool cmp(shu z1,shu z2)
{
if(z1.sim!=z2.sim) return z1.sim >z2.sim ;
else return z1.seq<z2.seq;
}
bool cmp2(shu z1,shu z2)
{return z1.seq<z2.seq;
}
int main()
{//double A=1;printf("%d",A);
printf("%lf %lf",pow(2,3),sqrt(2));
scanf("%d %d",&n,&k);
for(int j=0;j<k;j++) scanf("%d",&vx[j]);
for(int i=0;i<n;i++)
{for(int j=0;j<k;j++)
{
scanf("%d",&ve[i].v1[j]);
}
//ve[i].sim=1;
//ve[i].seq=1;
//printf("%d ",ve[i].sim);}
double s1=0,s2=0;double s=0;
ve[i].seq=i;
for(int l=0;l<k;l++)
{s1+=vx[l]*vx[l];
s2+=ve[i].v1[l]*ve[i].v1[l];
s+=double(vx[l])*ve[i].v1[l];
}
double ss=(double)s*s*100000000/((double)s1*s2);//必须放大,不然c看不出来
ve[i].sim=ss;
}
for(int i=0;i<n;i++)
//printf("%d ",ve[i].rk);
sort(ve,ve+n,cmp);
ve[0].rk=1;
for(int i=1;i<n;i++)
{if((ve[i].sim==ve[i-1].sim)) ve[i].rk=ve[i-1].rk;
else ve[i].rk=i+1;
}
sort(ve,ve+n,cmp2);
for(int i=0;i<n;i++)
printf("%d %lf",ve[i].rk,ve[i].sim);
}
为什么只有1.5h。。。