zoukankan      html  css  js  c++  java
  • #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;
    }
    
  • 相关阅读:
    Mbs Framework 简介
    回应老赵: 适合C# Actor的消息执行方式 中看也中用的解决方案
    Mini 容器学习笔记5—— 组件的获取
    JS控制文本框只能输入N个字符.
    【转】外挂编写原理
    【转】集合小节
    CSS样式的filter(滤镜效果)
    系统变量(%SystemRoot% ,%windir% ,%temp%,%system%)的表示方法
    客户端调用服务器控件
    Flash MX 认证考试(样题)
  • 原文地址:https://www.cnblogs.com/Cao-Yucong/p/12722314.html
Copyright © 2011-2022 走看看