首页 > 其他分享 >猜结论专题

猜结论专题

时间:2023-08-24 17:22:46浏览次数:51  
标签:结论 cnt 专题 idx int tt else dis

A - Non-Adjacent Flip

https://atcoder.jp/contests/arc156/tasks/arc156_a

题意

给定一个01串,每次可以把不相邻的两个字符进行翻转,问最少要操作多少次使得全部变为0,无解输出-1。

分析

记录 \(1\) 的数量为 \(cnt\)。
每次翻转不改变 \(1\) 的奇偶性,所以 \(1\) 的数量为奇数时无解。
\(cnt>2\) 时,答案均为 \(\frac{cnt}2\)(每次可以翻转不相邻的 \(1\))
\(cnt=2\) 时,若两个 \(1\) 不相邻,则需 \(1\) 次,否则分为以下三种情况:

  1. 1 的左边或右边有两个以上 0,则需 2 次;
  2. 0110 需要3次
  3. 其余情况如 011 110 11 均无解

Code

#include <bits/stdc++.h>

using namespace std;

void solve () {
    int n;
    string s;
    cin >> n >> s;
    int tt = count (s.begin (), s.end (), '1');
    if (tt & 1) tt = -1;
    else if (tt == 2) {
        int l = -1, r = -1;
        for (int i = 0; i < s.size (); i++) {
            if (s[i] == '1') {
                if (l == -1)    l = i;
                else    r = i;
            }
        }
        if (r - l > 1)  tt = 1;
        //1100 -> 2
        else if (l > 1 || r < n - 2) tt = 2;
        //0110 -> 3
        else if (s == "0110")   tt = 3;
        else    tt = -1;
    }
    else    tt /= 2;
    cout << tt << endl;
}

int main () {
    int t;
    cin >> t;
    while (t--) solve ();
}

A. Almost Increasing Subsequence

https://codeforces.com/contest/1817/problem/A

题意

给一个序列,对于一个子区间,回答最长几乎上升子序列长度
也就是不能有连续三项 \(x\geq y\geq x\)

分析

划分成若干下降序列,每次可选的点是下降序列的左右端点。
做前缀和查询。
对于每次的查询的右端点,若原本不可选,则再给答案加上贡献。

Code

#include <bits/stdc++.h>

using namespace std;
const int N = 2e5 + 5;
int n, q, a[N], b[N], sum[N];

int main () {
    cin >> n >> q;
    for (int i = 1; i <= n; i++)    cin >> a[i];
    int lst = 1;
    for (int i = 1; i <= n; i++) {
        if (a[i] > a[i-1])  b[lst] = b[i-1] = 1, lst = i;
    }
    b[lst] = b[n] = 1;
    //for (int i = 1; i <= n; i++)    cout << b[i] << ' ';
    //cout << endl;
    for (int i = 1; i <= n; i++)    sum[i] = sum[i-1] + b[i];
    while (q--) {
        int l, r;
        cin >> l >> r;
        int cnt = sum[r] - sum[l-1];
        if (!b[l])  cnt++;
        if (l != r && !b[r])  cnt++;
        cout << cnt << endl;
    }
}

//x>=y>=z 的 y 就不选
//分成若干降序列

C. Between

https://codeforces.com/contest/1815/problem/C

题意

构造一个序列,每个元素1到n之间

  • 恰好一个1。
  • 若干个限制,两个ai之间,至少一个bi,问最长的序列。

分析

差分约束

Code

#include <bits/stdc++.h>

using namespace std;
typedef pair<int, int> pii;
const int N = 5005, M = 5005, inf = 0x3f3f3f3f;
int n, m, h[N], e[M], ne[M], idx;
int dis[N];
bool vis[N];
pii p[N];

void add (int a, int b) {
    e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

void bfs (int st) {
    queue <int> q;
    q.push (st);
    dis[st] = 1;

    while (!q.empty ()) {
        auto t = q.front ();
        q.pop ();
        if (vis[t]) continue;
        vis[t] = true;
        for (int i = h[t]; ~i; i = ne[i]) {
            int j = e[i];
            if (dis[j] > dis[t] + 1) {
                dis[j] = dis[t] + 1;
                q.push (j);
            }
        }
    }
}

void solve () {
    idx = 0;
    scanf ("%d%d", &n, &m);
    for (int i = 1; i <= n; i++) {
        h[i] = -1, dis[i] = inf;
        vis[i] = false;
    }
    while (m--) {
        int a, b;
        scanf ("%d%d", &a, &b);
        add (b, a);
    }
    bfs (1);
    int cnt = 0, maxn = 0;
    for (int i = 1; i <= n; i++) {
        if (dis[i] == inf) {
            printf ("INFINITE\n");
            return ;
        }
        //cout << dis[i] << ' ';
        cnt += dis[i], maxn = max (maxn, dis[i]);
        p[i] = {dis[i], i};
    }
    printf ("FINITE\n%d\n", cnt);
    sort (p + 1, p + n + 1, greater<pii>());
    for (int i = 1, j = n; i <= maxn; i++) { //次数<=i的都能输出
        while (p[j].first < i)  j--;
        for (int k = 1; k <= j; k++)    printf ("%d ", p[k].second);
    }
    printf ("\n");
}

int main () {
    int t;
    scanf ("%d", &t);
    while (t--)     solve ();
}

标签:结论,cnt,专题,idx,int,tt,else,dis
From: https://www.cnblogs.com/CTing/p/17654173.html

相关文章

  • 【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战
    前言Ehcache是一个流行的Java缓存框架,它提供了一种快速、可扩展和高效的方式来缓存数据。它可以帮助企业应用程序提高性能并减少数据库负载,因为它可以缓存经常访问的数据。Ehcache的主要特点快速:Ehcache使用内存缓存数据,因此它可以快速地访问缓存数据,而不需要从磁盘或数据库中读取......
  • webpack学习笔记专题目录
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]学习笔记专题目录webpack专题目录webpack学习笔记MacBook搭建python开发环境【必须】安装Python【必须】安装pip【必须】virtualenv的安装和使用【推荐】安装PyCharm【推荐】Py......
  • 面霸的自我修养:synchronized专题
    王有志,一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群:共同富裕的Java人今天是《面霸的自我修养》的第3弹,内容是Java并发编程中至关重要的关键字synchronized,作为面试中的“必考题”,这部分是你必须要充分准备的内容,接下来我们就一起一探究竟吧。数据来源:大部分来......
  • 【愚公系列】2023年08月 WPF控件专题 CheckBox控件详解
    (文章目录)前言WPF控件是WindowsPresentationFoundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见......
  • 网络流专题
    网络流基础知识网络网络是指一个有向图\(G=(V,E)\),对于网络里的每条边\((u,v)\inE\)都有一个权值\(c(u,v)\),称之为容量,当\((u,v)\notinE\)时有\(c(u,v)=0\)。网络中有两个特殊的点:源点\(s\inV\)和汇点\(t\inV\),\((s\neqt)\)。流设\(f(u,v)\)定义二元组\((......
  • [结论版]带空气阻力的抛射体飞行运动轨迹
    带空气阻力的抛射体飞行运动轨迹WriteByChamprinFrom2022-11-20To2022-11-GUETEvolutionTeamVisualGroup目录带空气阻力的抛射体飞行运动轨迹空气阻力与速度的一次方成正比速度与位移方程轨迹方程null落回初始高度所需时间\(t\)最大射程及其对应\(\theta\)空气阻力......
  • 二分答案专题
    T1包裹快递题目描述一个快递公司要将\(n\)个包裹分别送到\(n\)个地方,并分配给邮递员小K一个事先设定好的路线,小K需要开车按照路线给的地点顺序相继送达,且不能遗漏一个地点。小K得到每个地方可以签收的时间段,并且也知道路线中一个地方到下一个地方的距离。若到达某一......
  • 树专题训练
    核心城市题目描述:给定一棵树,需选定一个大小为\(k\)的连通块,最小化非连通块的点到连通块的最大距离。其中距离定义为点与连通块中所有点的路径最小值。数据范围:\(1\lek<n\le10^5\)。首先找到树的直径,以其中点为根,这样做的好处是连通块一定是包含根节点的一个连通块,之后......
  • 【愚公系列】2023年08月 WPF控件专题 Button控件详解
    (文章目录)前言WPF控件是WindowsPresentationFoundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见......
  • CTFer成长记录——CTF之Web专题·bugku—never_give_up
    一、题目链接https://ctf.bugku.com/challenges/detail/id/88.html二、解法步骤  打开网页,url中看到id=1,修改成2、3、4发现无反应。然后查看网页源代码:,提示一个网址,直接访问看看:发现url跳转到了bugku的论坛:    BP抓1p.html网页的包,在返回包中发现一串密文:  --JTI......