Codeforces Educational round 58

Ediv2 58

  • 随手AK.jpg

D

裸的虚树,在这里就不写了

E

傻逼贪心?这个题过的比$B$都多.jpg

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <iostream>
#include <bitset>
using namespace std;
#define N 500005
#define ll long long
int n,now_mx,maxx;char s[10];
int main()
{
    scanf("%d",&n);
    while(n--)
    {
        int x,y;scanf("%s%d%d",s+1,&x,&y);
        if(x<y)swap(x,y);
        if(s[1]=='+')now_mx=max(x,now_mx),maxx=max(y,maxx);
        else puts(x>=now_mx&&y>=maxx?"YES":"NO");
    }
}

F

似乎正解的那个单调队列做法没啥意思啊...

直接暴力二分+剪枝就好了...

然后其实能卡掉,但是懒得去卡了.jpg

然后卡一卡常数就好了.jpg

随便剪一剪枝前测就能过.jpg

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <iostream>
#include <bitset>
using namespace std;
#define N 405
#define ll long long
int a[N],n,m,s,t,f,c,l,r;ll ans;
inline bool check(int x)
{
    register int i,tc=c;register int now=x;
    for(i=s;i<t;i++)
    {
        if(a[i+1]-a[i]>x)return 0;
        if(a[i+1]-a[i]>now)
        {
            if(!tc)return 0;
            tc--;now=x;
        }
        now-=a[i+1]-a[i];
    }return 1;
}
int main()
{
    scanf("%d%d",&n,&m);l=0,r=1<<30;
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    while(m--)
    {
        scanf("%d%d%d%d",&s,&t,&f,&c);if(s>t)swap(s,t);
        if(check(ans/f))continue;
        l=(ans/f)+1;r=a[t]-a[s];
        while(l<r)
        {
            int mid=(l+r)>>1;
            if(check(mid))r=mid;else l=mid+1;
        }ans=max((ll)l*f,ans);
    }
    printf("%lld\n",ans);
}

G

一个结论,能划分出的段数是线性基里的基的个数

证明嘛:

对于任意一个已经存在的基,都可以被一些数表达出来

然后就可以发现,不可能存在一个划分的段数比线性基里的基数更多(根据线性基的定义

然后就完了.jpg

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <iostream>
#include <bitset>
using namespace std;
#define N 200005
#define ll long long
int a[32],now;
void insert(int x)
{
    for(int i=30;~i;i--)if((x>>i)&1)
        if(a[i])x^=a[i];
        else {a[i]=x;return ;}
}
int main()
{
    int n,x;
    scanf("%d",&n);
    while(n--)scanf("%d",&x),insert(x),now^=x;
    if(!now)return puts("-1"),0;
    x=0;
    for(int i=30;~i;i--)if(a[i])x++;
    printf("%d\n",x);
}

原文地址:https://www.cnblogs.com/Winniechen/p/10352590.html

时间: 2024-10-10 16:41:00

Codeforces Educational round 58的相关文章

codeforces educational round 73 div2 ABCD

A. 2048 Game Description 给出n个2的幂次数,问能否累加得到2048 Solution 从小往上累加. B. Knights Description Solution 贪心构造. 奇数位和偶数位放置不同就行了. C. Perfect Team Description 给出三个数,$c,m,x$代表每种选手的个数. 每三个人组一队,每队要求至少有一个c,一个m. 问最多能组多少支队伍. Solution 显然最多只能组成$min(c,m)$只队伍. 这是在$x \geq m

Codeforces Educational Round 23

A emmmmmmmmm B emmmmmmmmm C(套路) 题意: 给定n和s(n,s<=1e18),计算n以内有多少个数x满足(x-x的各个位置数字之和)>=s 分析: 容易想到如果x相对于s很大很大,那么肯定是满足条件的 那些小于s的数,肯定是不行的 于是x就可以从s开始,往后枚举1e6个,去判定这1e6个有多少个是满足条件的,再往后的那些x肯定是满足的,直接算出多少个就行了 D(插板法) 题意: 给定一个长度为n(n<=1e6)的数列,对于这个数列的一个连续的子列,定义valu

Educational Codeforces Round 58 (Rated for Div. 2)(待更新)

get人生第七场CF! 成绩:(exACM) rank AC3/7 Penalty104 rating() 题目:Educational Codeforces Round 58 (Rated for Div. 2) 错题题解: C. Division and Union 原文地址:https://www.cnblogs.com/xht37/p/10260260.html

Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://codeforces.com/contest/985/problem/E Description Mishka received a gift of multicolored pencils for his birthday! Unfortunately he lives in a monochrome w

Codeforces Beta Round #91 (Div. 1 Only) E. Lucky Array

E. Lucky Array Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal representation contains only the lucky digits 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467are not. Petya has an arra

CodeForces Beta Round #1

Codeforces Beta Round #1 A. Theatre Square [题意]一个n*m的矩形广场,用a*a的方形石板铺设,问最少需要多少块石板能铺满广场. [思路]水题,从n方向来看能能够铺设ceil(n/a)块,从m方向来看能能够铺设ceil(m/a)块,总共有ceil(n/a)*ceil(m/a)块. 1 /* 2 ** CodeForces 1A Theatre Square 3 ** Created by Rayn @@ 2014/05/18 4 */ 5 #inclu

暴力/DP Codeforces Beta Round #22 (Div. 2 Only) B. Bargaining Table

题目传送门 1 /* 2 题意:求最大矩形(全0)的面积 3 暴力/dp:每对一个0查看它左下的最大矩形面积,更新ans 4 注意:是字符串,没用空格,好事多磨,WA了多少次才发现:( 5 详细解释:http://www.cnblogs.com/cszlg/p/3217478.html 6 */ 7 #include <cstdio> 8 #include <algorithm> 9 #include <cstring> 10 #include <cmath>

图论/暴力 Codeforces Beta Round #94 (Div. 2 Only) B. Students and Shoelaces

题目传送门 1 /* 2 图论/暴力:这是个连通的问题,每一次把所有度数为1的砍掉,把连接的点再砍掉,总之很神奇,不懂:) 3 */ 4 #include <cstdio> 5 #include <cstring> 6 #include <algorithm> 7 #include <cmath> 8 using namespace std; 9 10 const int MAXN = 1e2 + 10; 11 const int INF = 0x3f3f3

BFS Codeforces Beta Round #94 (Div. 2 Only) C. Statues

题目传送门 1 /* 2 BFS:三维BFS,坐标再加上步数,能走一个点当这个地方在步数内不能落到.因为雕像最多8步就会全部下落, 3 只要撑过这个时间就能win,否则lose 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <queue> 8 #include <vector> 9 #include <cstring> 10 using namespace std; 11 1