【练题】备战蓝桥杯之排序专题(持续更新)

三国游戏

4.三国游戏 - 蓝桥云课 (lanqiao.cn)

// #include <iostream>
// using namespace std;
// #define N 100010
// int a[N];
// int b[N];
// int c[N];
// int a_sum[N];
// int b_sum[N];
// int c_sum[N];
// int main()
// {
//     int n;
//     cin >> n;
//     int flat = 0;
//     int cnt = 0;
//     for (int i = 0; i < n; i++)
//     {
//         cin >> a[i];
//     }
//     for (int i = 0; i < n; i++)
//     {
//         cin >> b[i];
//     }
//     for (int i = 0; i < n; i++)
//     {
//         cin >> c[i];
//     }
//     for (int i = 1; i < n; i++)
//     {
//         a_sum[0]=a[0]; b_sum[0]=a[0];  b_sum[0]=a[0];
//         a_sum[i] = a_sum[i - 1] + a[i];
//         b_sum[i] = b_sum[i - 1] + b[i];
//         c_sum[i] = c_sum[i - 1] + c[i];
//         if ((a_sum[i] + b_sum[i] > c_sum[i]) || (c_sum[i] + b_sum[i] > a_sum[i]) || (a_sum[i] + c_sum[i] > b_sum[i]))
//         {
//             flat = 1;
//             cnt = i;
//         }
//     }
//     if (flat)
//         cout << cnt;
//     else
//         cout << "-1";
//     return 0;
// }
// #include<bits/stdc++.h>
// using namespace std;
// typedef long long LL;
// const int N = 1e5 + 10;
// int a[N], b[N], c[N], w[N];
// int n;
// int work(int x[], int y[], int z[]) //返回使得x获胜的多事件
// {
//     for(int i=1;i<n + 1;i++)    
//     w[i] = x[i] - y[i] - z[i]; //使得x国胜利,第i个事件的贡献度为w[i]
//     sort(w + 1, w + 1 + n, greater<int>()); //降序排列
//     LL  sum = 0;
//     int idx = -1;
//     for(int i=1;i<n + 1;i++)
//     {
//         sum += w[i];
//         if(sum > 0) //严格大于的时候才可以获胜
//             idx = i; //记录最大事件
//         else  // <=0的时候,不能获胜,接着遍历sum只会更小,break即可
//             break;
//     }
//     return idx;
// }

// int main()
// {
//     scanf("%d", &n);
//     for(int i=1;i<n + 1;i++)    
//     scanf("%d", &a[i]);
//     for(int i=1;i<n + 1;i++)    
//     scanf("%d", &b[i]);
//     for(int i=1;i<n + 1;i++)    
//     scanf("%d", &c[i]);     
//     int res = -1;
//     res = max(work(a, b, c), max(work(b, a, c), work(c, a, b)));
//     cout << res << endl;
//     return 0;
// }
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int a[N], b[N], c[N], h[N];
int n;
int work(int x[], int y[], int z[]) //返回使得x获胜的多事件
{
    for(int i=1;i<n + 1;i++)    
     h[i] = x[i] - y[i] - z[i]; //先算出来每一个独立事件发生的时候,该值的正负。
    sort(h + 1, h + 1 + n, greater<int>()); //把它们降序排列出来,这样的话就可以按照
    LL  sum = 0;
    int idx = -1;
    for(int i=1;i<n + 1;i++)
    {
        sum +=h[i];
        if(sum > 0)
            idx = i; //记录最大会发生的事件
        else//<=0的时候是不可能获胜的,因为贡献值是逐渐变小的
           break;
    }
    return idx;
}

int main()
{
    cin>>n;
    for(int i=1;i<n + 1;i++)    
    scanf("%d", &a[i]);
    for(int i=1;i<n + 1;i++)    
    scanf("%d", &b[i]);
    for(int i=1;i<n + 1;i++)    
    scanf("%d", &c[i]);     
    int res = -1;//如果没有的话,那么输出还是-1
    res = max(work(a, b, c), max(work(b, a, c), work(c, a, b)));
    cout << res << endl;
    return 0;
}



1.错误票据 - 蓝桥云课 (lanqiao.cn)

错误票据

输入的时候有这样一种方法

while (line--) {
        while (cin >> a) {
       //判断条件
       //将h[a]加一,记录他出现的次数
        }
如果次数大于1,就是重复ID
如果次数小于1,就是遗漏ID

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值