codeforces - 1257(div2)

本文解析了四道编程挑战题目,包括两学生竞争、魔法棒、受支配子数组及另一怪物击杀问题。通过贪心策略、二分查找等算法解决实际问题,深入探讨了数据结构和算法的应用。

A-Two Rival Students 

贪心,判断一下左边和右边

#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#pragma GCC optimize(2)
 
#define mm(i,v) memset(i,v,sizeof i);
#define mp(a, b) make_pair(a, b)
#define one first
#define two second
 
using namespace std;
typedef long long ll;
typedef pair<int, int > PII;
 
const int N = 1e6 + 5, mod = 1e9 + 9, INF = 0x3f3f3f3f;
int t, n, x, a, b;
 
int main()
{
//    freopen("in.txt", "r", stdin);
//    freopen("out.txt", "w", stdout);
//    cin.tie(0);
//    cout.tie(0);
//    ios::sync_with_stdio(0);
    cin >> t;
    while (t--) {
        cin >> n >> x >> a >> b;
        if (abs(a - b) == n - 1) {
            cout << n - 1 << endl;
            continue;
        }
        
        int sum = a + b;
        b = a + b - min(a, b);
        a = sum - b;
        int tmp1 = a - 1, tmp2 = n - b;
        b = b + min(x, tmp1 + tmp2);
        cout << (b - a) << endl;
    }
}
View Code

B - Magic Stick 

因为当x大于等于y的时候是一定可以通过把x减一的方式将他变成y的,所以我们要尽可能把x变大。策略就是如果x是奇数就把他减去1变成偶数,偶数就直接成二分之三。特判一下如果x是奇数并且(x - 1) * 3 / 2 等于x的话就不可能达到 

#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#pragma GCC optimize(2)
 
#define mm(i,v) memset(i,v,sizeof i);
#define mp(a, b) make_pair(a, b)
#define one first
#define two second
 
using namespace std;
typedef long long ll;
typedef pair<int, int > PII;
 
const int N = 1e6 + 5, mod = 1e9 + 9, INF = 0x3f3f3f3f;
ll t, x, y;
 
int main()
{
    cin >> t;
    while (t--) {
        cin >> x >> y;
        while (1) {
            if (x >= y) {
                puts("YES");
                break;
            }
            if (!(x & 1)) {
                x = x * 3 / 2;
            } else {
                x--;
                ll tmp = x * 3 / 2;
                if (tmp == x + 1 || tmp == 0) {
                    puts("NO");
                    break;
                }
            }
        }
    }
    
}
/*
1
858993461 1000000000
*/ 
View Code

C - Dominated Subarray

在读入的时候一边读一边用map记录并更新当前这个数上次出现的位置,更新答案。

#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#pragma GCC optimize(2)
 
#define mm(i,v) memset(i,v,sizeof i);
#define mp(a, b) make_pair(a, b)
#define one first
#define two second
 
using namespace std;
typedef long long ll;
typedef pair<int, int > PII;
 
const int N = 2e5 + 5, mod = 1e9 + 9, INF = 0x3f3f3f3f;
int t, n;
int a[N];
map <int, int> Map;
 
int main()
{
    cin >> t;
    while (t--) {
        cin >> n;
        Map.clear();
        int ans = INF;
        for (int i = 1; i <= n; ++i) {
            scanf("%d", &a[i]);
            if (Map[a[i]] != 0) {
                if (i - Map[a[i]] + 1 < ans) {
                    ans = i - Map[a[i]] + 1;
                    Map[a[i]] = 0;
                }
            }
            Map[a[i]] = i;
        }
        if (n == 1) {
            puts("-1");
            continue;
        }
        if (ans != INF)
        cout << ans << endl;
        else
        puts("-1");
    }
}
View Code

D - Yet Another Monster Killing Problem

特判后把奥特曼二分着来打怪兽

#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#pragma GCC optimize(2)
 
#define mm(i,v) memset(i,v,sizeof i);
#define mp(a, b) make_pair(a, b)
#define one first
#define two second
 
using namespace std;
typedef long long ll;
typedef pair<int, int > PII;
 
const int N = 2e5 + 5, mod = 1e9 + 9, INF = 0x3f3f3f3f;
int t, n, m, maxx, tid, pos, res;
int a[N], id[N];
PII e[N];
 
int main()
{
    cin >> t;
    while (t--) {
        cin >> n;
        int w = -1;
        for (int i = 1; i <= n; ++i) {
            scanf("%d", &a[i]);
            w = max(w, a[i]);
        }
        cin >> m;
        bool flag = 1;
        for (int i = 1; i <= m; ++i) {
            scanf("%d%d", &e[i].first, &e[i].second);
            if (e[i].first >= w)
                flag = 0;
        }
        
        if (flag) {
            puts("-1");
            continue;
        }
        
        sort(e + 1, e + 1 + m);
        
        maxx = 0;
        for (int i = m; i >= 1; --i) {
            if (e[i].second > maxx) {
                maxx = e[i].second;
                tid = i;
            }
            id[i] = tid;
        }
        
        pos = 1, res = 0;
        while (pos <= n) {
            tid = lower_bound(e + 1, e + 1 + m, PII(a[pos], -1)) - e;
            tid = id[tid];
            maxx = e[tid].second;
            for (int j = 1; j <= maxx; ++j) {
                if (a[pos] <= e[tid].first) pos++;
                else {
                    tid = lower_bound(e + 1, e + 1 + m, PII(a[pos], -1)) - e;
                    tid = id[tid];
                    if (e[tid].second >= j) {
                        maxx = e[tid].second;
                        pos++;
                    }
                    else
                    break;
                }
            }
            res++;
        }
        cout << res << endl;
    }
}
/*
1
5
78 22 90 12 42
5
51 1
87 3
48 2
13 1
98 5
*/
View Code
一、基础信息 数据集名称:Bottle Fin实例分割数据集 图片数量: 训练集:4418张图片 验证集:1104张图片 总计:5522张图片 分类类别: - 类别0: 数字0 - 类别1: 数字1 - 类别2: 数字2 - 类别3: 数字3 - 类别4: 数字4 - 类别5: 数字5 - 类别6: Bottle Fin 标注格式:YOLO格式,包含多边形坐标,适用于实例分割任务。 数据格式:图片格式常见如JPEG或PNG,具体未指定。 二、适用场景 实例分割AI模型开发:数据集支持实例分割任务,帮助构建能够精确识别和分割图像中多个对象的AI模型,适用于对象检测和分割应用。 工业自动化与质量控制:可能应用于制造、物流或零售领域,用于自动化检测和分类物体,提升生产效率。 计算机视觉研究:支持实例分割算法的学术研究,促进目标检测和分割技术的创新。 教育与实践培训:可用于高校或培训机构的计算机视觉课程,作为实例分割任务的实践资源,帮助学生理解多类别分割。 三、数据集优势 多类别设计:包含7个不同类别,涵盖数字和Bottle Fin对象,增强模型对多样对象的识别和分割能力。 高质量标注:标注采用YOLO格式的多边形坐标,确保分割边界的精确性,提升模型训练效果。 数据规模适中:拥有超过5500张图片,提供充足的样本用于模型训练和验证,支持稳健的AI开发。 即插即用兼容性:标注格式直接兼容主流深度学习框架(如YOLO),便于快速集成到各种实例分割项目中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值