当前位置: 代码网 > it编程>软件设计>算法 > codeforces签到题之div4

codeforces签到题之div4

2024年08月06日 算法 我要评论
模拟,暴力,排序,贪心,双指针,几何,字符串

🌼坏女孩(抖音热门版) - laziness惰/西洛卡 - 单曲 - 网易云音乐

标签:模拟,暴力,排序,贪心,双指针,几何,字符串

目录

一,codeforces检查 

二,接下来的方向

三,前置和追加

四,明显的分裂

五,负数和正数

总结


前言

昨晚参加了洛谷入门赛和codeforces的div4,今晚参加acwing周赛

接下来,我会把昨晚cf前5题题解写出来,复盘,以便提高会的题目的熟练程度,同时解决未ac题目的bug

一,codeforces检查 

problem - a - codeforces

标签:模拟,字符串 

#include<iostream>
using namespace std;
bool check(char a)
{
    string s = "codeforces";
    for(int i = 0; i < 10; ++i) {
        if(a == s[i]) return true;
    }
    return false;
}
int main()
{
    string s;
    int n;
    cin>>n;
    for(int i = 0; i < n; ++i) {
        cin>>s[i];
        if(check(s[i])) cout<<"yes";
        else cout<<"no";
        if(i != n - 1) cout<<endl;
    }

    return 0;
}

二,接下来的方向

problem - b - codeforces

标签:模拟,几何

 

 

#include<iostream>
using namespace std;
int main()
{
    int n, m, a, b;
    cin>>n;
    for(int i = 0; i < n; ++i) {
        cin>>m;
        string s;
        cin>>s;
        a = 0, b = 0;
        for(int j = 0; j < m; ++j) {
            if(s[j] == 'u') a++;//横坐标
            else if(s[j] == 'd') a--;
            else if(s[j] == 'l') b--;//纵坐标
            else if(s[j] == 'r') b++;
            if(a == 1 && b == 1) {
                cout<<"yes";
                break;
            }
            if(j == m - 1) {
                cout<<"no";
                break;
            }
        }
        if(i != n - 1) cout<<endl;
    }
    return 0;
}

三,前置和追加

problem - c - codeforces

标签:模拟,双指针

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin>>n;
    while(n) {
        int m;
        string s;
        cin>>m;
        cin>>s;
        int flag = 1;
        while(flag) {
            flag = 0;
            if(s[0] == '0' && s[m - 1] == '1') {
                s = s.substr(1, m - 2);
                m -= 2;
                flag = 1;
            }
            if(s[0] == '1' && s[m - 1] == '0') {
                s = s.substr(1, m - 2);
                m -= 2;
                flag = 1;
            }
        }
        cout<<s.size();
        if(n != 1) cout<<endl;
        n--;
    }
    return 0;
}

四,明显的分裂

problem - d - codeforces

标签:暴力,贪心,字符串 

#include<iostream>
#include<set> //set<char>a;
#include<vector> //vector<int>b(m) ;
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n) {
        int m;
        cin>>m;
        string s;
        cin>>s;
        set<char>a;
        vector<int>b(m); //长度跟字符串一样
        for(int i = m - 1; i >= 0; --i) {
            a.insert(s[i]); //正序插入
            b[i] = a.size(); //尾在前
        }
        a.clear(); //清空a集合
        int ans = 0; //记得初始化
        for(int i = 0; i < m - 1; ++i) {
            a.insert(s[i]); //头在前
            ans = max(int(a.size()) + b[i + 1], ans); //int转化
        }
        cout<<ans;
        if(n != 1) cout<<endl;
        n--;
    }
    return 0;
}

五,负数和正数

problem - e - codeforces

标签:贪心,排序 

比如

1 -3 4 -16 2 -8 2
1 -3 4 -16 -2 8 2
1 -3 4  16  2 8 2
-1 3 4  16  2 8 2

发现这个规律后,代码就变得很简单了

否则就像我一开始,写了半小时也只过了样例。。。

#include<iostream>
#include<cmath> //abs()
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t) {
        int n;
        cin>>n;
        long long sum = 0, min = 1e9, flag = 0; //10的9次方
        while(n) {
            long long a;
            cin>>a;
            sum += abs(a); //绝对值
            if(a < 0) flag++; //统计负数个数
            min = min(min, abs(a));
            n--;
        }
        if(flag % 2) sum -= 2 * min; //减去多加的和本身
        printf("%lld", sum);
        if(t != 1) printf("\n");
        t--;
    }
    return 0;
}

总结

codeforces很多思维题(也就是规律题),有种回到初高中数学的感觉,所以,不应该固步自封,我们要算法,规律两手抓,能找到规律就用规律(多点见识大佬们的代码),找不到就老老实实上并查集,二叉树,dfs,stl等等

真的,不要一整天用自己的思路死磕代码,多点看看codeforces里别人的代码,以后你做题都会快很多,思路广很多

这就是为什么你要在csdn,acwing,洛谷,codeforces四个网站上打比赛的原因,多点看看别人的ac代码,把思维打开

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com