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
#