|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码写的有点乱。我先把系数保存,再用结构体去存函数值,然后sort排序。
输入
第一行包含一个整数 n,代表点的个数。
接下来 n 个数字,代表 n 个点的横坐标 p
接下来一行有一个形如 y=ax2+bx+c 的抛物线其中(a ≠ 0,b ≠ 0)
1 <= n <= 105,-106 <= p, a <= 106,1 <= b, c <= 106
输出包含一行 n 个数,按照纵坐标由小到大输出其对应的横坐标 (数字之间由空格隔开,如果纵坐标相等则按照横坐标从小到大输出)
样例输入
3
1 2 3
y=1x^2+2x+114514
样例输出
1 2 3
#include<iostream>
#include<algorithm>
using namespace std;
long long n;
struct node
{
long long x,y;
};
bool cmp(node a,node b)
{
return a.x<=b.x;
}
int main()
{
cin>>n;
getchar();
node c[n+3]={0};
long long a[n+5];
for(int i=1;i<=n;i++)
{
cin>>a[i];
getchar();
}
string s;
cin>>s;
getchar();
int b[5]={0};
int t=1;
for(int i=1;i<s.size();i++)
{
if((s[i-1]=='+'||s[i-1]=='=') &&s[i]>='0'&&s[i]<='9'&&s[i+1]!='+'&&s[i+1]!='-')//存正数
{
b[t]=b[t]*10+(s[i]-'0');
}
int flag;
if(s[i-1]=='-' &&s[i]>='0'&&s[i]<='9'&&s[i+1]!='+'&&s[i+1]!='-') //存负数
{
flag=1;
b[t]=b[t]*10+(s[i]-'0');
}
if(flag==1)
{
b[t]=-b[t];
flag=0;
}
if(s[i-1]>='0'&&s[i-1]<='9'&&(s[i]=='x'||s[i]=='\0'))
{
t++;
}
}
t=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=3;j++)
{
if(j==1)
{
c[i].x+=a[i]*a[i]*b[j];
}
else if(j==2)
{
c[i].x+=a[i]*b[j];
}
else{
c[i].x+=b[j];
}
}
c[i].y=i;
}
sort(c+1,c+1+n,cmp);
for(int i=1;i<=n;i++)
{
if(i==1)
{
cout<<a[c[i].y];
}
else{
cout<<" "<<a[c[i].y];
}
}
}
|
|