目录
#include<iostream>
#include <cstdio>
using namespace std;
int main()
{
int num;
int sum=0;
int temp;
while(~scanf("%d",&num)&&num!=0)
{
if(num==1)
{
temp=1;
sum+=1;
}
else if (num==2)
{
sum+= 2*temp;
temp++;
}
}
cout<<sum<<endl;
return 0;
}
碰撞的小球
-
碰撞的小球思路
题目理解:结果是求t秒之后的位置,那么正常情况下就是每个球t秒后的位置,其中附加条件球会碰撞速度不变的向相反的方向走,且碰撞的球的个数都是偶数个,所以只需要球两两判断就可以了(注意:当球到达端点的时候会方向相反)。
(1)因为他们的碰撞只在整数的位置,所以只需要按每秒一个单位的速度向一个方向行走。当球到达L或者顶点的时候,改变方向。
(2)碰撞条件:当两个球位置相同,方向相反的时候会发生碰撞。(注:碰撞的时候方向改变。 )
-
碰撞的小球AC代码
#include<iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n,L,t;
int p[105];//位置
int f[105];//方向
cin>>n>>L>>t;
memset(p,0,sizeof(p));
memset(f,0,sizeof(f));//规定L方向为0,原点方向为1.
for(int i=0;i<n;i++)
{
cin>>p[i];
}
for(int i=1;i<=t;i++)//时间
{
for(int j=0;j<n;j++)//球
{
if(f[j]==0)//往L走
{
p[j]+=1;
if(p[j]==L||p[j]==0)
f[j]=~f[j];
}
else//往0走
{
p[j]-=1;
if(p[j]==L||p[j]==0)
f[j]=~f[j];
}
}
for(int j=0;j<n;j++)
{
for(int k=j;k<n;k++)
{
if(p[j]==p[k]&&f[j]!=f[k])
{
f[j]=~f[j];
f[k]=~f[k];
}
}
}
}
for(int i=0;i<n;i++)
{
cout<<p[i]<<" ";
}
return 0;
}