首页 > 其他分享 >07_04_暑期个人赛1

07_04_暑期个人赛1

时间:2024-07-05 23:20:06浏览次数:1  
标签:07 04 vis int 暑期 ii ++ include 回文

C. Canine poetry

时间:2024-07-05

原题:Good Bye 2020 C. Canine poetry

题意

对于一个字符串 \(s\) ,可以对任一字符变为 \(*\) 号,使所有子串不为回文串,即可将 \(babba\) 变为 \(ba*ba\) 使字符串内不存在回文串

数据范围: \(|s|\le 1e5\)

思路

对于某回文字符串,如果是长度为奇数,那么中心的三个字符组成的子串一定是字符串,偶数同理

那么将所有的长度为2和3的回文串进行处理就能达到效果

代码

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define int long long

int _, n;
vector<bool>vis;
void solve() {
    string s;
    cin >> s;
    int len = s.length();
    vis.assign(len, false);

    int ans = 0;
    for (int i = 1; i < s.length(); i++) {
        // 长度为2的回文串,如果没被换过,换后面的字符
        if (s[i] == s[i - 1] && !vis[i - 1]) {
            vis[i] = true;
            ans++;
        }
        // 长度为3的回文串,同理换第一个
        else if (i - 2 >= 0 && s[i] == s[i - 2] && !vis[i - 2]) {
            vis[i] = true;
            ans++;
        }
    }
    cout << ans << endl;
}
signed main() {
    cin >> _;
    while (_--)
        solve();
    return 0;
}

C. Ehab and Path-etic MEXs

时间:2024-07-05

原题:Codeforces Round 628 (Div. 2) C. Ehab and Path-etic MEXs

题意

有一颗 \(n\) 个结点的树,对每条边编号,属于 \([0,n-2]\) ,要求所有对节点对 \((u,v)\) ,其 \(MEX(u,v)\) 的最大值最小

\(MEX(u,v)\) 表示从 \(u\) 到 \(v\) 的唯一简单路径上没出现过的最小编号

理解: 有点绕,就是说,有从 \(u\) 到 \(v\) 假如经过了边1,2,4那么最小的未出现的数就是0,则 \(MEX(u,v)=0\)

即 \(Ans=max(MEX(u,v))\) ,求 \(Ans_{min}\)

思路

首先假定是最简单的情况,也就是一条链,那么简单看一下所有的可能性,可知 \(Ans=n-1\)

所以对于单链,随机存放即可

接下来,如果多了一条链,那么可以观察度大于等于3的点

对于这样的点,无论哪种 \((u,v)\) 的搭配,对于这个点至少有一条边不被覆盖

即只要将0,1,2这最小的三个编号分配在三条分路上,其他编号随意分配,就能实现 \(Ans=2\)

代码

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

#define int long long
#define rep(i,j,k) for(i=(j);i<(k);i++)
typedef pair<int, int> pii;
const int N = 1e5 + 10;

int n, ii;

vector<vector<int>>g;
int u[N], v[N];
void solve() {
    cin >> n;
    g.assign(n + 1, vector<int>(0));

    rep(ii, 0, n - 1) {
        cin >> u[ii] >> v[ii];
        g[u[ii]].emplace_back(v[ii]);
        g[v[ii]].emplace_back(u[ii]);
    }
    // 如果有大于等于3的度,以存储两个顶点的形式存储每条边,012对应共三条
    pii p[3];
    int i;
    for (i = 0; i < g.size(); i++) {
        vector<int> vv = g[i];
        if (vv.size() >= 3) {
            for (int j = 0; j < 3; j++) {
                p[j].first = i;
                p[j].second = vv[j];
            }
            break;
        }
    }
    // 如果没有大于等于3的度,随意输出
    if (i == g.size()) {
        rep(ii, 0, n - 1) {
            cout << ii << endl;
        }
        return;
    }

    
    int ans = 0;
    int index = 3;
    for (int i = 0; i < n - 1; i++) {
        int j;
        for (j = 0; j < 3; j++) {
            int f = p[j].first, s = p[j].second;
            // 如果是012所在的边,输出012,否则输出index
            if ((u[i] == f && v[i] == s) || (u[i] == s && v[i] == f)) {
                cout << ans << endl;
                ans++;
                break;
            }
        }
        if (j == 3) {
            cout << index++ << endl;
        }
    }
}
signed main() {
    solve();
    return 0;
}

标签:07,04,vis,int,暑期,ii,++,include,回文
From: https://www.cnblogs.com/lulaalu/p/18286754

相关文章

  • P10449 费解的开关
    费解的开关题目描述你玩过“拉灯”游戏吗?\(25\)盏灯排成一个\(5\times5\)的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。我们用数......
  • 代码随想录刷题day 3 | 链表理论基础 203.移除链表元素 707.设计链表 206.反转链
    203.移除链表元素classSolution{publicListNoderemoveElements(ListNodehead,intval){ListNodevirHead=newListNode(0,head);ListNodetmp=virHead;while(tmp.next!=null){if(tmp.next.val==val){......
  • AI网络爬虫007:批量爬取***视频搜索结果
    文章目录一、任务二、输入内容三、输出内容一、任务批量爬取***视频的搜索结果内容,包括视频标题,视频地址和视频创作者等信息。定位到元素位置:<divclass="ILGAlGLX">《梅西的Al道歉》本年度最佳Al视频,看来梅西还想在中国淘金,这才是真正的“商业头脑”#梅西......
  • 代码随想录算法训练营第3天| 203.移除链表元素 ,707.设计链表 ,206.反转链表
    学习任务:链表理论基础Leetcode203.移除链表元素Leetcode707.设计链表Leetcode206.反转链表Leetcode203.移除链表元素难度:简单|相关标签:递归、链表题目:给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节......
  • NO.04 Altium Designer组件参数类型
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档@TOCAltiumDesigner组件参数类型前言○由于“BOM、ActiveBOM或Draftsman必须与设计中的组件一致”因此无法直接进行删除BOM、ActiveBOM或Draftsman“其中一项;○不过可以通过设置组件“参数”类型......
  • MSPM0G3507——读取引脚的高低电平方法(数字信号循迹模块)
     SYSCFG配置  代码部分//第一个传感器if(DL_GPIO_readPins(xunji_PORT_PIN1_PORT,xunji_PORT_PIN1_PIN)==xunji_PORT_PIN1_PIN)//黑,不亮高{a=1;}......
  • 20240705比赛总结
    T1酸碱度中和https://gxyzoj.com/d/hzoj/p/3731因为是要将一些数变为一个值,所以差相对小的一些数修改的会更少,所以可以先将原数组排序因为当x可以时,x+1必然可以,所以考虑二分接下来考虑到因为上下变动的都至多为m,所以开头和结尾的差必然不超过2m它就可以看作用一些长度为2m的......
  • 代码随想录算法训练营第十五天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之
    110平衡二叉树1classSolution{2public:3intGetHeight(TreeNode*root){4if(!root){5return0;6}7intleftHeight=GetHeight(root->left);8if(leftHeight==-1)ret......
  • Windows中启用Ubuntu22.04(WSL2,SSH)
    场景需要使用Ubuntu系统,需要使用显卡。wsl2不支持桌面显示,需安装远程桌面。安装需要先启用“适用于Linux的Windows子系统”可选功能,然后才能在Windows上安装Linux分发。以管理员身份打开PowerShell并运行:dism.exe/online/enable-feature/featurename:Microsoft-Windo......
  • 20240705总结(欧拉回路,构造)
    A-FairShareCF1634EFairShare题解:用二分图做的。首先如果一种颜色出现奇数次一定无解。否则对于一种颜色的点分组,每组两个之间连边,保证每种颜色平分。然后把每一个数组分成n[i]/2组,每组两个之间连边,保证每一个数组平分。这样一定连出的是二分图,黑白染色B-NecklaceCF......