Codeforces Round #613 (Div. 2) ABCDE

本文详细解析了Codeforces Round #613 (Div. 2)的A到F五道题目,包括题目描述、解题思路和复杂度分析。涉及到的问题涵盖字符串操作、数学逻辑、数论、动态规划和区间操作等算法知识。
摘要由CSDN通过智能技术生成

Codeforces Round #613 (Div. 2)


Problem A

题意: 给出一个串,L代表-1,R代表+1,现在你只让其中一些数字有效,询文最多有多少种不同结果

思路: LR一起用等于不用,所以只用L或者只用R,最后结果就是L+R+1

#include<bits/stdc++.h>
    
using namespace std;
    
#define ll long long
#define for1(i,a,b) for (int i=(a);i<=(b);i++)
#define for0(i,a,b) for (int i=(a);i<(b);i++)
#define rof1(i,a,b) for (int i=(a);i>=(b);i--)
#define rof0(i,a,b) for (int i=(a);i>(b);i--)
#define pb push_back
#define fi first
#define se second
#define duozu int __T;scanf("%d",&__T);for1(ica,1,__T)
void _W(const int &x) {
    printf("%d", x); }
void _W(const ll &x) {
    printf("%I64d", x); }
void _W(const double &x) {
    printf("%.16f", x); }
void _W(const char &x) {
    putchar(x); }
void _W(const char *x) {
    printf("%s", x); }
void W(){
   }
template<class T, class... U> void W(const T &head, const U &... tail) {
    _W(head); putchar(sizeof...(tail) ? ' ' : '\n'); W(tail...); }
void _R(const int& x){
    scanf("%d", &x); }
void _R(const ll& x){
    scanf("%I64d", &x); }
void _R(const char* x){
    scanf("%s", x); }
void R(){
   }
template<class T,class... U> void R(const T& head,const U& ...tail){
   _R(head);R(tail...);}
const ll mod = 1e9+7;
ll ft1(ll a,ll b){
   ll ans = 1;while (b){
   if (b&1) ans *= a;b>>=1,a*=a;}return ans;}
ll ft2(ll a,ll b){
   ll ans = 1;while (b){
   if (b&1) ans = ans*a%mod;b>>=1,a=a*a%mod;}return ans;}
    
const int N = 1e5+5;
    
char s[N];
    
int main()
{
   
    int n;
    R(n,s);
    W(n+1);
    return 0;
}

Problem B

题意: 判断是否存在一段连续区间的数大于整个数列的总和

思路: 取走一段区间,剩下左右两端,若左右皆负,存在,一边负而另一边非负,只需将另一边一并取出来即可保证剩下部分是负数——官方做法

我是线段树维护区间最大连续和,然后由于不能取整个区间所有分为1n-1,2n各自求了一次,废了时间废了空间,当时还在想这道题为什么大家A的这么快-_-||

#include<bits/stdc++.h>
    
using namespace std;
    
#define ll long long
#define for1(i,a,b) for (int i=(a);i<=(b);i++)
#define for0(i,a,b) for (int i=(a);i<(b);i++)
#define rof1(i,a,b) for (int i=(a);i>=(b);i--)
#define rof0(i,a,b) for (int i=(a);i>(b);i--)
#define pb push_back
#define fi first
#define se second
#define duozu int __T;scanf("%d",&__T);for1(ica,1,__T)
void _W(const int &x) {
    printf("%d", x); }
void _W(const ll &x) {
    printf("%I64d", x); }
void _W(const double &x) {
    printf("%.16f", x); }
void _W(const char &x) {
    putchar(x); }
void _W(const char *x) {
    printf("%s", x); }
void W(){
   }
template<class T, class... U> void W(const T &head, const U &... tail) {
    _W(head); putchar(sizeof...(tail) ? ' ' : '\n'); W(tail...); }
void _R(const int& x){
    scanf("%d", &x); }
void _R(const ll& x){
    scanf("%I64d", &x); }
void _R(const char* x){
    scanf("%s", x); }
void R(){
   }
template<class T,class... U> void R(const T& head,const U& ...tail){
   _R(head);R(tail...);}
const ll mod = 1e9+7;
ll ft1(ll a,ll b){
   ll ans = 1;while (b){
   if (b&1) ans *= a;b>>=1,a*=a;}return ans;}
ll ft2(ll a,ll b){
   ll ans = 1;while (b){
   if (b&1) ans = ans*a%mod;b>>=1,a=a*a%mod;}return ans;}
#define mid int m = l+r>>1
#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值