CF1169(div2)题解报告

CF1169(div2)题解报告

A

不管

B

首先可以证明,如果存在解

其中必定有一个数的出现次数大于等于\(\frac{m}{2}\)

暴力枚举所有出现次数大于等于$\frac{m}{2} $的数

剩下的数看看有没有一个公共数即可

由于出现次数大于等于$\frac{m}{2} $的数不会太多

所以时间复杂度应该是\(O(n)\)的

#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<vector>
#include<ctime>
#include<cmath>
#define LL long long
#define pii pair<int,int>
#define mk make_pair
#define fi first
#define se second
using namespace std;
inline int read(){
    int v = 0,c = 1;char ch = getchar();
    while(!isdigit(ch)){
        if(ch == '-') c = -1;
        ch = getchar();
    }
    while(isdigit(ch)){
        v = v * 10 + ch - 48;
        ch = getchar();
    }
    return v * c;
}
const int N = 3e5 + 3;
int n,r;LL ans;
char s[N];
int main(){
    scanf("%s",s + 1);
    n = strlen(s + 1);
    r = n + 1;
    for(int i = n - 1;i >= 1;--i){
        r = min(r,i + 9);
        for(int k = 1;i + 2 * k <= r;++k){
            if(s[i] == s[i + k] && s[i] == s[i + k + k]){
                r = min(r,i + k + k);
                break;
            }
        }
        ans += n - r + 1;
    }
    cout << ans;
    return 0;
}

C

所有题目先考虑答案是否就有单调性

这种最优解问题且答案具有单调性的题目先考虑二分答案

然后看卡能否贪心判断可行性

这道题我们二分枚举答案之后

我们肯定是贪心的让每个数都尽量小

对于一个数

如果他能在二分的答案的步数之内达到最小值就去

如果不行看看是否合法,判断一下是否无解

因为我们肯定不会让一个满足条件数再变大,那样只会不优

#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<vector>
#include<ctime>
#include<cmath>
#define LL long long
#define pii pair<int,int>
#define mk make_pair
#define fi first
#define se second
using namespace std;
const int N = 3e5 + 3;
int a[N];
int f[N];
int pre[N];
int n,m;
inline int read(){
    int v = 0,c = 1;char ch = getchar();
    while(!isdigit(ch)){
        if(ch == '-') c = -1;
        ch = getchar();
    }
    while(isdigit(ch)){
        v = v * 10 + ch - 48;
        ch = getchar();
    }
    return v * c;
}
int ans = 0x3f3f3f3f;
inline bool check(int mid){
    for(int i = 1;i <= n;++i) pre[i] = a[i];
    pre[1] = m - a[1] > mid ? a[1] : 0;
    for(int i = 2;i <= n;++i){
        if(a[i] < pre[i - 1]){
            if(pre[i - 1] > a[i] + mid) return 0;
            pre[i] = pre[i - 1];
        }
        else{
            if(a[i] == pre[i - 1]) pre[i] = a[i];
            if(a[i] > pre[i - 1]) pre[i] = m - a[i] + pre[i - 1] > mid ? a[i] : pre[i - 1];
        }
    }
    return 1;
}
int main(){
    n = read(),m = read();
    for(int i = 1;i <= n;++i) a[i] = read();
    int l = 0,r = 10000000,ans;
    while(l <= r){
        int mid = (l + r) >> 1;
        if(check(mid)) r = mid - 1,ans = mid;
        else l = mid + 1;
    }
    cout << ans;
    return 0;
}

D

神仙暴力题Orz

原文地址:https://www.cnblogs.com/wyxdrqc/p/11397266.html

时间: 2024-11-10 14:29:03

CF1169(div2)题解报告的相关文章

cojs 强连通图计数1-2 题解报告

OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一改就可以了 首先我们考虑不合法的方案强连通分量缩点后一定是DAG 考虑子问题:DAG计数 做法可以参考<cojs DAG计数1-4 题解报告> 这里给出转移方程 f(n)=sigma((-1)^(k-1)*C(n,k)*2^(k*(n-k))*f(n-k)) 如果考虑上强连通分量缩点的情况呢? 我

2016 年宁波工程学院第七届ACM校赛题解报告

2016 年宁波工程学院第七届ACM校赛题解报告 本题解代码直接为比赛代码,仅供参考. A,B,C,D,G,H,J,K,L,M 来自 Ticsmtc 同学. F 来自 Gealo 同学. E,I 来自Alex 学长. Promblem A :    Two Sum 时间限制: 1 Sec  内存限制: 64 MB 题目描述: 给出n个数,另外给出?个整数S,判断是否可以从中取出2个数,使得这两个数的和是S. 输入: 第?行有个整数T(1 <= T <= 10),代表数据组数. 对于每组数据,第

线段树&#183;题解报告

线段树·题解报告 参考资料 ·课件 线段树 --刘汝佳 统计的力量,线段树全接触 --张昆玮 ·Blog [完全版]线段树 从普通线段树到zkw线段树 [总结][数据结构]ZKW线段树详解 选题目录 · Hdu1166 敌兵布阵(单点更新,区间求和) · Hdu1754 I Hate It(单点更新,RMQ) · Hdu3308 LCIS(单点更新,区间并) · Poj3468 A Simple Problem with Integers(区间加减,区间求和) · Poj2777 Count C

cf#261 div2 解题报告

.....代码没什么可说的,主要是学习各路大神姿势 A题 化简化简水题,都告诉平行坐标轴了,数据还出了对角线,后面两个点坐标给的范围也不错 ........和最优代码相比姿势有点混乱 #include <cstdio> int x[4],y[4]; int abs(int n){ return n<0?-n:n; } int main(){ scanf("%d%d%d%d",x,y,x+1,y+1); int dx=abs(x[0]-x[1]); int dy=abs

题解报告:hdu 1162 Eddy&#39;s picture

Problem Description Eddy begins to like painting pictures recently ,he is sure of himself to become a painter.Every day Eddy draws pictures in his small room, and he usually puts out his newest pictures to let his friends appreciate. but the result i

题解报告:poj 3320 Jessica&#39;s Reading Problem(尺取法)

Description Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam is coming, yet she has spent little time on it. If she wants to pass it, she has to master all ideas included in a very thick text book. The au

题解报告:poj 2480 Longge&#39;s problem(欧拉函数)

Description Longge is good at mathematics and he likes to think about hard mathematical problems which will be solved by some graceful algorithms. Now a problem comes: Given an integer N(1 < N < 2^31),you are to calculate ∑gcd(i, N) 1<=i <=N. 

题解报告(CDUT暑期集训——第三场)

题解报告(CDUT暑期集训--第三场) A - Problem A. Ascending Rating HDU - 6319 思路:单调队列板子题?(但是弱的一批的我还是不会用(有空补上 用的滑动窗口算法 按着题解的从后往前做(ps:菜是原罪 AC代码 #include<stdio.h> #include<iostream> #include<math.h> #include<algorithm> #include<string.h> #incl

CFEducational Codeforces Round 66题解报告

CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第\(k\)小的值 那么问题就变成了 每一个数变成了\([x-mid,x+mid]\)的一段区间,如果有一个位置被覆盖了超过\(k\)次 那么\(mid\)一定合法 类似括号匹配 每次碰到左端点就贡献+1 右端点就统计答案然后-1 维护答案的同时顺便维护位置就好了 #include<cstdio>