1 条题解
-
0
C++ :
#include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> using namespace std; long long n,m,p1,s1,s2,sum1,sum2,minn=(long long)1e+20,k,number; struct ming { long long c;//人数 long long far;//离m点的距离 long long air;//气势 }a[100005];//定义结构体,按兵营计数 void read(long long &x)//输入优化 { long long f=1;x=0;char s=getchar(); while(s>'9'||s<'0'){if(s=='-') f=-1;s=getchar();} while(s>='0'&&s<='9'){x=(x<<3)+(x<<1)+s-'0';s=getchar();} x*=f; } void write(long long x)//输出优化 { if(x<0) { x=(~x)+1; putchar('-'); } if(x>9) write(x/10); putchar(x%10+'0'); } long long Fabs(long long x)//判断绝对值 { if(x<0) return -x; return x; } int main() { read(n); for(long long i=1;i<=n;i++) read(a[i].c); read(m);read(p1);read(s1);read(s2); a[p1].c+=s1;//得到天降神兵的兵营人数增加 for(long long j=1;j<=n;j++) { a[j].far=Fabs(j-m);//计算每个兵营离m点的距离 a[j].air=a[j].far*a[j].c;//计算每个兵营的气势 if(j<m) sum1+=a[j].air;//计算龙方 if(j>m) sum2+=a[j].air;//计算虎方 } if(sum1==sum2) { write(m); return 0; }//如果双方气势一致则放在m营中 k=0;//k赋初值 while(k<n)//超过边界退出 { k++;//枚举每个兵营 long long t,t1; if(k==m) { t=sum1; t1=sum2; }//k处于m时双方不变 if(k<m) { t=sum1+a[k].far*s2; t1=sum2; }//小于m时龙方增加 if(k>m) { t=sum2+a[k].far*s2; t1=sum1; }//大于m时虎方增加 if(Fabs(t-t1)<minn)//计算双方气势之差 { minn=Fabs(t-t1);//最小值 number=k;//其序号 } } write(number);//输出 return 0; }
- 1
信息
- ID
- 2357
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者