碰撞的小球
90分
#include<iostream>
#include<algorithm>
using namespace std;
struct stua//小球状态
{
int n_w,p_w;//位置
int f;//方向,1代表右,-1代表左
};
bool cmp(stua a,stua b)
{
return a.p_w < b.p_w;
}
int main()
{
int i,j;
int n,L,t;
cin>>n>>L>>t;
stua a[n],tmp[n];
for(i=0;i<n;i++)
{
cin>>a[i].n_w;
a[i].p_w = a[i].n_w;
tmp[i].n_w = a[i].n_w;
a[i].f = 1;
}
sort(a,a+n,cmp);
int b[n];//记录位次
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if( tmp[i].n_w == a[j].n_w )
{
b[i] = j;//现在的位置
}
}
}
// for(i=0;i<n;i++)
// {
// cout<<a[b[i]].n_w<<" ";
cout<<a[i].n_w<<" ";
// }
for(i=0;i<t;i++)
{
for(j=0;j<n;j++)
{
// cout<<i<<"s:";
if((a[j].p_w == L&&a[j].f==1)||(a[j].p_w == 0&&a[j].f==-1)||a[j].p_w == a[j-1].p_w||a[j].p_w == a[j+1].p_w)
{
a[j].f = -1*a[j].f;
}
a[j].n_w = a[j].n_w + a[j].f;
// cout<<"location:"<<a[j].n_w<<" direction:"<<a[j].f<<endl;
}
// cout<<endl;
for(j=0;j<n;j++)
{
a[j].p_w = a[j].n_w;
}
}
for(i=0;i<n;i++)
{
cout<<a[b[i]].n_w<<" ";
// cout<<a[i].n_w<<" ";
}
return 0;
}
/*
样例输入
3 10 5
4 6 8
样例输出
7 9 9
样例输入
10 22 30
14 12 16 6 10 2 8 20 18 4
样例输出
6 6 8 2 4 0 4 12 10 2
*/
以上代码,两个样本点都对了,但我实在不知道哪里错了,会运行错误。sort()?
100分
#include<iostream>
using namespace std;
struct stua//小球状态
{
int n_w,p_w;//位置
int f;//方向,1代表右,-1代表左
};
int main()
{
int i,j,k;
int n,L,t;
cin>>n>>L>>t;
stua a[n],tmp[n];
for(i=0;i<n;i++)
{
cin>>a[i].n_w;
a[i].p_w = a[i].n_w;
tmp[i].n_w = a[i].n_w;
a[i].f = 1;
}
for(i=0;i<t;i++)
{
for(j=0;j<n;j++)
{
// cout<<i<<"s:";
if((a[j].p_w == L&&a[j].f==1)||(a[j].p_w == 0&&a[j].f==-1))
{
a[j].f = -a[j].f;
}
else
{
for(k=0;k<n;k++)
{
if(a[j].p_w == a[k].p_w&&k!=j)
{
a[j].f = -a[j].f;
}
}
}
a[j].n_w = a[j].n_w + a[j].f;
// cout<<j<<"location:"<<a[j].n_w<<" direction:"<<a[j].f<<" "<<endl;
}
for(j=0;j<n;j++)
{
a[j].p_w = a[j].n_w;
}
}
for(i=0;i<n;i++)
{
cout<<a[i].n_w<<" ";
}
return 0;
}
/*
样例输入
3 10 5
4 6 8
样例输出
7 9 9
样例输入
10 22 30
14 12 16 6 10 2 8 20 18 4
样例输出
6 6 8 2 4 0 4 12 10 2
*/