陈柏诚 • 3年前
#include <iostream>
using namespace std;
int main(){
int n=0;//小球个数
int L=0;//线段长度
int t=0;//时间
int Q[100]={0};//存放小球初始位置
int Q2[100]={0};//暂存上一秒小球位置
int QF[100]={0};//存放小球当前运动方向,1向右、-1向左
for(int i=0;i<100;i++)//小球运动方向初始化为向右
QF[i]=1;
cin>>n>>L>>t;
for(int i=0;i<n;i++)
cin>>Q[i]; //至此实现题设的输入要求
int m1;
int m2;
for(int i=0;i<t;i++){//最外层实现t个周期的循环
for(int i=0;i<n;i++)//暂存上个周期小球运动方向
Q2[i]=Q[i];
for(m1=0;m1<n;m1++){
if((Q2[m1]==L&&QF[m1]==1)||(Q2[m1]==0&&QF[m1]==-1))//两个端点
QF[m1]=-QF[m1];
else//小球之间相撞
for(m2=0;m2<n;m2++)
if(Q2[m1]==Q2[m2]&&m1!=m2)
QF[m1]=-QF[m1];
Q[m1]=Q[m1]+QF[m1];
}
}
for(int i=0;i<n;i++)
cout<<Q[i]<<" ";
cout<<endl;
return 0;
}
评论:
你的是错的,这才是AC代码
#include <bits/stdc++.h>
using namespace std;
int n;
bool mapp[5010][5010];
struct platform {
int h, l, r;
} a[1010];
int main() {
scanf("%d", &n);
for(int i=1;i<=n;i++) {
scanf("%d%d%d", &a[i].h, &a[i].l, &a[i].r);
for(int j=a[i].l;j<=a[i].r;j++)
mapp[a[i].h][j] = true;
}
int j;
for(int i=1;i<=n;i++) {
j = a[i].h;
while(--j) {
if(mapp[j][a[i].l-1])
break;
}
printf("%d ", j);
j = a[i].h;
while(--j) {
if(mapp[j][a[i].r+1])
break;
}
printf("%d\n", j);
}
return 0;
}
using namespace std; int H[1005],L[1005],R[1005]; int main() {
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>H[i]>>L[i]>>R[i];
}
for(int i=1;i<=n;i++)
{
int AnsL=0,AnsR=0,h1=0,h2=0;
for(int j=1;j<=n;j++)
{
if(H[i]>H[j])
{
if(H[j]>h1&&L[j]<L[i]&&R[j]>=L[i])
{
h1=H[j];
AnsL=j;
}
if(H[j]>h2&&R[j]>R[i]&&L[j]<=R[i])
{
h2=H[j];
AnsR=j;
}
}
}
printf("%d %d\n",AnsL,AnsR);
}
return 0;
}