贪心Hdu1052田忌赛马

两个版本我都写了不知道为什么一直wa=========啊
唉真是跟网上的代码一行一行都对过了,算了吃饭去了,难受
希望我可以早日明白到底是怎么回事
另外这位兄弟写的不错
https://www.cnblogs.com/DOLFAMINGO/p/7538779.html

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    int n;
    vector<int> tian;
    vector<int> qi;
    int h;
    int ans;
    int flag = 0;
    while (cin >> n&&n) {
        if (flag)
            cout << endl;
        flag = 1;
        ans = 0;
        for (int i = 1; i <= n; ++i) {
            cin >> h;
            tian.push_back(h);
        }
        for (int i = 1; i <= n; ++i) {
            cin >> h;
            qi.push_back(h);
        }
        sort(tian.rbegin(), tian.rend());//降序
        sort(qi.rbegin(), qi.rend());
        int l1 = 0, l2 = 0, r1 = n - 1, r2 = n - 1;//田和齐当前最好与最差的马
        while (l1 <= r1) {//注意这个循环终止条件
            if (tian[r1] > qi[r2]) {
                ans += 200;
                --r1; --r2;
            }
            else if (tian[r1] < qi[r2]) {
                ans -= 200;
                --r1; ++l2;
            }
            else {
                if (tian[l1] > qi[l2]) {
                    ans += 200;
                    ++l1; ++l2;
                }
                else if (tian[l1] < qi[l2]) {
                    ans -= 200;
                    --r1; ++l2;
                }
                else {
                    if (tian[r1] < qi[l2]) ans -= 200;
                    --r1; ++l2;
                }
            }

        }
        cout << ans;
    }
    system("pause");
    return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    int n;
    vector<int> tian;
    vector<int> qi;
    int h;
    int ans;
    int flag = 0;
    while (cin >> n&&n) {
        if (flag)
            cout << endl;
        flag = 1;
        ans = 0;
        for (int i = 1; i <= n; ++i) {
            cin >> h;
            tian.push_back(h);
        }
        for (int i = 1; i <= n; ++i) {
            cin >> h;
            qi.push_back(h);
        }
        sort(tian.rbegin(), tian.rend());//降序
        sort(qi.rbegin(), qi.rend());
        int l1 = 0, l2 = 0, r1 = n - 1, r2 = n - 1;//田和齐当前最好与最差的马
        while (l1 <= r1) {//注意这个循环终止条件
            if (tian[l1]<qi[l2]) {
                    //田最差与齐最好vs输
                    ans -= 200;
                    --r1;
                    ++l2;
            }
            else if (tian[l1] > qi[l2]) {
                 //田最好与齐最好vs赢
                ans += 200;
                l1++;
                l2++;
            }
            else if (tian[l1] == qi[l2]) {
                if (tian[r1] > qi[r2]) {
                    //田最差与齐最差vs赢
                    ans += 200;
                    --r1;
                    --r2;
                }
                else {
                    //田最差与齐最好vs
                    //注意这里有一种田最差与齐最好相等的可能所以和最上面
                    //田最好不如齐最好是不一样的
                    if (tian[r1] < qi[l2]) ans -= 200;
                    --r1;
                    ++l2;
                }
            }

        }
        cout << ans;
    }
    system("pause");
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容