#3 Debug日志

luogu P5016 龙虎斗

模拟题,就没啥思路,模拟就是了。所以出一个DeBug日志。

最初代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;;
long long m,n,s1,s2,p1,p2;
long long c[100099];
long long str1,str2;
long long abs_(long long a){
    return a > 0? a : -a;
}
int main(){
    cin >> n;
    for(long long i = 1;i <= n; i++){
        cin >> c[i];
    }
    cin >> m >> p1 >> s1 >> s2;
    for(long long i = 1;i <= n; i++){
        if(i < m){
            str1 += c[i] * (m - i);
        }else if(i > m){
            str2 += c[i] * (i - m);
        }
    }
    if(p1 > m){
        str2 += s1 * (p1 - m);
    }
    if(p1 < m){
        str1 += s1 * (m - p1);
    }
    // cout << str1 << ' ' << str2 << endl;
    long long ans = 1000000099;
    for(long long i = 1;i <= n; i++){
        long long k;// ①
        if(i < m){
            str1 += s2 * (m - i);
            k = abs_(str1 - str2);
            str1 -= s2 * (m - i);
        }else if(i > m){
            str2 += s2 * (i - m);
            k = abs_(str1 - str2);
            str2 -= s2 * (i - m);
        }
        if(ans > k){
            ans = k;
            p2 = i;
        }
    }
    // cout << ans << ' '  << endl;
    cout << p2 << endl;
    return 0;
}

①处的代码一开始有问题,因为没有考虑到这个s2在m时,他不属于任何阵营,实际上就是自己原本的值。我们需要把这个自己的值放进去进行计算,实际上只需要每次生命k的时候,就把k的值赋值成原本的力量之差。然后再进行序号的更新就可以。

更改后的代码

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
long long m,n,s1,s2,p1,p2;
long long c[100099];
long long str1,str2;
long long abs_(long long a){
    return a > 0? a : -a;
}
int main(){
    cin >> n;
    for(long long i = 1;i <= n; i++){
        cin >> c[i];
    }
    cin >> m >> p1 >> s1 >> s2;
    for(long long i = 1;i <= n; i++){
        if(i < m){
            str1 += c[i] * (m - i);
        }else if(i > m){
            str2 += c[i] * (i - m);
        }
    }
    if(p1 > m){
        str2 += s1 * (p1 - m);
    }
    if(p1 < m){
        str1 += s1 * (m - p1);
    }
    // cout << str1 << ' ' << str2 << endl;
    long long ans = 1000000099;
    for(long long i = 1;i <= n; i++){
        long long k = abs(str1 - str2);
        if(i < m){
            str1 += s2 * (m - i);
            k = abs_(str1 - str2);
            str1 -= s2 * (m - i);
        }else if(i > m){
            str2 += s2 * (i - m);
            k = abs_(str1 - str2);
            str2 -= s2 * (i - m);
        }
        if(ans > k){
            ans = k;
            p2 = i;
        }
    }
    // cout << ans << ' '  << endl;
    cout << p2 << endl;
    return 0;
}
posted @ 2020-04-17 20:00  CYC的幸福生活  阅读(159)  评论(0编辑  收藏  举报