• P5016龙虎斗


    这道题是2018年普及组的第二题,是一个模拟题。

    首先计算出双方各自的势力,然后将增援的队伍势力加上,比较此时双方势力,并且作差,最后枚举将公平兵加在哪一个兵营。看似简单的题被我20分钟就写完了,但是调了整整16次!对于“坑”值得警惕!

    三个坑点:要用long long;当我copy龙的代替虎的时候一定要注意不再是m-p了,而是p-m了(m-ansp1与ansp2-m同理);当把公平兵全部加在一方时势力差可能要大于原有差,所以这时候也要加在中间。

    1.复制代码时一定要考虑两个对象的不同计算,所以不多的话就不要复制前面的。

    2.注意看运算结果的数据范围,小心被卡double ,long long...

    3.一定要把整体过程把握好

    4.不要把简单的题做简单了,想想还有什么情况,切忌盲目自信。

    代码: 

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<string>
     5 #include<algorithm>
     6 #define MAXN 100000
     7 using namespace std;
     8 int n;
     9 int m;//中间阵营 
    10 long long force_d=0;
    11 long long force_t=0;
    12 long long  soldier[MAXN+5]; 
    13 long long p1,s1,p2,s2;
    14 long long disparity=0;
    15 long long ansp1;
    16 long long ansp2;
    17 long long fabs(long long x){
    18     if(x>=0) return x;
    19     else return -x; 
    20 }
    21 int main(){
    22     cin>>n;
    23     for(int i=1;i<=n;i++){
    24         cin>>soldier[i];
    25     }
    26     cin>>m>>p1>>s1>>s2;
    27     ansp1=1;
    28     ansp2=m+1;
    29     for(int i=1;i<=m-1;i++){//龙的势力 
    30         force_d=force_d+soldier[i]*(m-i);
    31     } 
    32     for(int i=m+1;i<=n;i++){//虎的势力 
    33         force_t=force_t+soldier[i]*(i-m);
    34     }     
    35     if(p1<=m-1&&p1<=n){//天降奇兵 
    36         force_d=force_d+s1*(m-p1);
    37     }
    38     else if(p1>=m+1&&p1<=n){
    39         force_t=force_t+s1*(p1-m);
    40     } 
    41     else if(p1==m&&p1<=n){
    42         force_t=force_t;
    43         force_d=force_d;
    44     }
    45     //cout<<"气势"<<force_d<<" "<<force_t<<" ";
    46     if(force_t>force_d){//虎大,加在龙营 
    47         disparity=force_t-force_d;
    48         for(int i=13;i<=m-1;i++){
    49             if(fabs(s2*(m-i)-disparity)<fabs(s2*(m-ansp1)-disparity)){
    50                 ansp1=i;
    51             }
    52         }
    53         //cout<<endl;
    54         //cout<<abs(s2*(m-ansp1[cnt])-disparity);
    55         if(disparity>fabs(s2*(m-ansp1)-disparity)) cout<<ansp1;
    56         else cout<<m;
    57         return 0;    
    58     }
    59     else if(force_t<force_d){//龙大,加在虎营地 
    60         disparity=force_d-force_t;
    61         for(int i=m+1;i<=n;i++){
    62             if(fabs(s2*(i-m)-disparity)<fabs(s2*(ansp2-m)-disparity)){
    63                 ansp2=i; 
    64             }
    65         }
    66     //    cout<<abs(s2*(m-ansp2[cnt])-disparity);
    67         if(disparity>fabs(s2*(ansp2-m)-disparity)) cout<<ansp2;
    68         else cout<<m;        
    69         return 0;            
    70     }
    71     else if(force_t==force_d){
    72         cout<<m;
    73         return 0;
    74     }
    75 
    76 } 
    待到oi十一月,我花开后百花杀。
  • 相关阅读:
    Base64原理与实现
    Oracle中rownum用法警示
    实例游戏内存修改器----CUI版本模拟
    Win32进程创建、进程快照、进程终止用例
    pThreads线程(三) 线程同步--条件变量
    pThreads线程(二) 线程同步--互斥量/锁
    pThreads线程(一) 基本API
    VS调试快捷键
    运行程序报“应用程序配置不正确”或者缺少运行库造成程序不可移植的问题
    C++模拟键盘消息
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11215826.html
Copyright © 2020-2023  润新知