Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3

A,有多个线段,求一条最短的线段长度,能过覆盖到所又线段,例如(2,4)和(5,6)

那么我们需要4 5连起来,长度为1,例如(2,10)(3,11),用(3,10)

思路:我们想一下如果题目说的是最长我们肯定是取最小x和最大的y连起来就完事。

但是要求长度最小又得覆盖,那么可以这样想,我们需要把最小的x不断右移到这条线段的y,

最大的左移到x,所以就是最大x-最小y完事

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,x,y,z,b,c=0,a=0,k;
ll arr[1000006];
int main()
{
    ios_base::sync_with_stdio(0);
    cin>>m;
    while(m--){
       cin>>n;
       ll mx = -1e9 , mn=1e9;
       for(int i=0 ; i<n;i++){
        cin>>x>>y;
        mx = max(mx , x);
        mn = min(mn , y);
       }
       cout<<max(mx -mn , (ll) 0)<<endl;
    }
    return 0;
}

B 没啥好说的,

https://codeforces.com/contest/1262/problem/B

#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;

const int maxn = 1e5+10;

int n, p[maxn], a[maxn];
set<int> s;

void solve() {
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i) {
		scanf("%d", a+i);
		s.insert(i);
	}
	for (int i = 1; i <= n; ++i) {
		if (a[i] != a[i-1]) {
			p[i] = a[i];
			s.erase(a[i]);
		} else {
			if (*s.begin() > a[i]) {
				puts("-1");
				return;
			}
			p[i] = *s.begin();
			s.erase(s.begin());
		}
	}
	for (int i = 1; i <= n; ++i)
		printf("%d%c", p[i], " \n"[i==n]);
}

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

 C,

给你一个括号序列,你有一个操作,选定l,r,就可以反转他们,例如 1 2 3 4变成 4 3 2 1

最多n次操作,那就说明我们一定能构造成我们想要的序列

题目要求你把这个序列变成合法括号序列,同时!恰好有k个前缀是合法的。

很容易想到先构造k-1个()这种序列,这样()()(),然后后面把所有括号变成((()))这种

#include<bits/stdc++.h>
using namespace std;
int n,k;
string s;
void solve_swap(int x,int y){
    while(x<y){
        swap(s[x],s[y]);
        x++,y--;
    }
}
string get_str(int n,int k){
    string tmp="";
    for(int i=0;i<k-1;i++){
        tmp+="(";
        tmp+=")";
    }
    int len = n-tmp.size();
    for(int i=0;i<len/2;i++){
        tmp+="(";
    }
    for(int i=0;i<len/2;i++){
        tmp+=")";
    }
    return tmp;
}
void solve(){
    cin>>n>>k;
    cin>>s;
    vector<pair<int,int>>ans;
    string final_str = get_str(n,k);
    for(int i=0;i<s.size();i++){
        if(s[i]!=final_str[i]){
            for(int j=i+1;j<s.size();j++){
                if(s[j]==final_str[i]){
                    solve_swap(i,j);
                    ans.push_back(make_pair(i+1,j+1));
                    break;
                }
            }
        }
    }
    //cout<<s<<endl;
    cout<<ans.size()<<endl;
    for(int i=0;i<ans.size();i++){
        cout<<ans[i].first<<" "<<ans[i].second<<endl;
    }
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--)solve();
}

  D1,D2

https://www.cnblogs.com/hgangang/p/11648398.html更新到了里面

 

原文地址:https://www.cnblogs.com/hgangang/p/11965301.html

时间: 2024-10-12 15:21:58

Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3的相关文章

Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) C. Messy 构造

C. Messy You are fed up with your messy room, so you decided to clean it up. Your room is a bracket sequence s=s1s2-sn of length n. Each character of this string is either an opening bracket '(' or a closing bracket ')'. In one operation you can choo

Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) B. Box 贪心

B. Box Permutation p is a sequence of integers p=[p1,p2,-,pn], consisting of n distinct (unique) positive integers between 1 and n, inclusive. For example, the following sequences are permutations: [3,4,1,2], [1], [1,2]. The following sequences are n

Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) F2. Wrong Answer on test 233 (Hard Version) dp 数学

F2. Wrong Answer on test 233 (Hard Version) Your program fails again. This time it gets "Wrong answer on test 233" . This is the harder version of the problem. In this version, 1≤n≤2?105. You can hack this problem if you locked it. But you can h

Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) D2. Optimal Subsequences (Hard Version) 数据结构 贪心

D2. Optimal Subsequences (Hard Version) This is the harder version of the problem. In this version, 1≤n,m≤2?105. You can hack this problem if you locked it. But you can hack the previous problem only if you locked both problems. You are given a seque

Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) A Math Problem

//只要从所有区间右端点的最小值覆盖到所有区间左端点的最大值即可 #include<iostream> using namespace std ; int x,y; int n; int t; int main() { cin>>t; while(t--) { cin>>n; if(n==1) { cin>>x>>y; cout<<0<<endl; } else { int l=0,r=1e9+10; for(int i=

Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) B Box

#include<bits/stdc++.h> using namespace std; int shu[100005]; int ans[100005]; int main() { int total; cin>>total; while(total--) { int n; bool flag=true; cin>>n; unordered_set<int>tree; set<int>num; for(int i=1; i<=n; i++

Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) C Messy

//因为可以反转n次 所以可以得到任何可以构成的序列 #include<iostream> #include<string> #include<vector> using namespace std ; typedef pair<int,int>PII; int n,k; string s; string get_str(int n,int k) {//先构建前k-1个 string res=""; for(int i=0; i<k

【cf比赛记录】Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

比赛传送门 只能说当晚状态不佳吧,有点头疼感冒的症状.也跟脑子没转过来有关系,A题最后一步爆搜没能立即想出来,B题搜索没有用好STL,C题也因为前面两题弄崩了心态,最后,果然掉分了. A:简单数学 B:数学+排序 C:字符串搜索 A // https://codeforces.com/contest/1277/problem/A /* 题意: 给出一个数,求不大于该数的完美整数的个数(完美整数指全是一个数组成的数字,如:111, 333333, 444444, 9, 8888 ...) 分析:

Codeforces Round #591 (Div. 2, based on Technocup 2020 Elimination Round 1) 题解

A..B略 C 对当前的值排序,再二分答案,然后对于(i%x==0 && i%y==0)放入大的,再放其他的贪心解决即可. #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<map> #define LL long long #define lson rt<<1 #define rson rt<