又打了一场EDU,感觉这场比23难多了啊……

艹还是我太弱了。

A.

随便贪心一下。

#include<bits/stdc++.h>
using namespace std;
int n,sum=,ans=-,m;
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
n=read();for(int i=;i<=n;i++){int x=read();sum+=x;}m=read();
while(m--){
int l=read(),r=read();
if(r>=sum){
ans=max(l,sum);break;
}
}
printf("%d\n",ans);
}

B.

预处理一下x,y的幂次就随便做了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll>a;
ll x,y,l,r,ans=;
int main(){
ios::sync_with_stdio(false);cin>>x>>y>>l>>r;
a.push_back(l-);a.push_back(r+);
for(ll i=;;i*=x){
for(ll j=;;j*=y){
ll len=i+j;
if(len>=l&&len<=r)a.push_back(i+j);
if(j>r/y)break;
}
if(i>r/x)break;
}
sort(a.begin(),a.end());
for(ll i=;i<a.size();i++)ans=max(ans,a[i]-a[i-]-);
cout<<ans<<endl;
}

C.
推一下结论就行了。

#include<bits/stdc++.h>
#define N 200005
using namespace std;
int da[N],db[N],head[N],tot=,n,x,ans=;
struct Edge{int u,v,next;}G[N<<];
inline void addedge(int u,int v){
G[++tot].u=u;G[tot].v=v;G[tot].next=head[u];head[u]=tot;
G[++tot].u=v;G[tot].v=u;G[tot].next=head[v];head[v]=tot;
}
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
void dfs(int u,int fa,int *d){
for(int i=head[u];i;i=G[i].next){
int v=G[i].v;if(v==fa)continue;
d[v]=d[u]+;
dfs(v,u,d);
}
}
int main(){
n=read();x=read();
for(int i=;i<n;i++){
int u=read(),v=read();
addedge(u,v);
}
da[]=db[]=-;dfs(,,da);dfs(x,,db);
for(int i=;i<=n;i++)if(db[i]<da[i])ans=max(ans,*da[i]);
printf("%d\n",ans);
}

D.

按照官方题解做法dp一下就行。

#include<bits/stdc++.h>
#define N 5010
using namespace std;
int a[N],dp[N][N],cx[],cy[],n,ans=;
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
n=read();for(int i=;i<=n;i++)a[i]=read();
for(int i=;i<=n;i++){
memset(cx,,sizeof(cx));memset(cy,,sizeof(cy));
for(int j=;j<i;j++){
cx[a[j]%]=max(cx[a[j]%],dp[i][j]);
cy[a[j]]=max(cy[a[j]],dp[i][j]);
}
for(int j=i+;j<=n;j++){
dp[i][j]=dp[j][i]=max(max(cx[a[j]%],dp[i][]),max(cy[a[j]-],cy[a[j]+]))+;
ans=max(ans,dp[i][j]);
cx[a[j]%]=max(cx[a[j]%],dp[i][j]);
cy[a[j]]=max(cy[a[j]],dp[i][j]);
}
}
printf("%d\n",ans);
}

E.
用动态开点线段树维护一下(因为值域过大)

#include<bits/stdc++.h>
#define N 100005
using namespace std;
int rt[N],a[N],cnt,n,k,m;
int sumv[N*],ls[N*],rs[N*];
queue<int>q[N];
void ins(int &x,int pre,int l,int r,int q,int v){
if(l>r)return;x=++cnt;sumv[x]=sumv[pre]+v;
ls[x]=ls[pre];rs[x]=rs[pre];if(l==r)return;
int mid=(l+r)>>;
if(q<=mid)ins(ls[x],ls[pre],l,mid,q,v);
else ins(rs[x],rs[pre],mid+,r,q,v);
}
int query(int o,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr)return sumv[o];
int ans=,mid=(l+r)>>;
if(ql<=mid)ans+=query(ls[o],l,mid,ql,qr);
if(qr>mid)ans+=query(rs[o],mid+,r,ql,qr);
return ans;
}
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
n=read();k=read();
for(int i=;i<=n;i++)a[i]=read();
for(int i=;i<=n;i++){
q[a[i]].push(i);ins(rt[i],rt[i-],,n,i,);
if(q[a[i]].size()>k){
int tmp=q[a[i]].front();q[a[i]].pop();
ins(rt[i],rt[i],,n,tmp,-);
}
}
m=read();int ans=;
while(m--){
int l=read(),r=read();
l=(l+ans)%n+;r=(r+ans)%n+;
if(l>r)swap(l,r);
ans=query(rt[r],,n,l,r);
printf("%d\n",ans);
}
}

F.

这tm做cf都能碰到原题,日哦。

bzoj4025。

可以分治并查集维护下(注意此时并查集不可以路径压缩)

或者直接LCT,参考2014集训队论文做法。

人懒就不码LCT了。

#include<bits/stdc++.h>
#define N 500005
using namespace std;
int n,m,t,fa[N],top,q[N<<],d[N],a[N];
struct Edge{int x,y,l,r;}G[N];
inline int get(int x){
while(fa[x]!=x)x=fa[x];
return x;
}
inline int dis(int x){
int ret=;while(fa[x]!=x)ret^=a[x],x=fa[x];
return ret;
}
inline void link(int x,int y,int v){
if(d[x]>d[y])swap(x,y);if(d[x]==d[y])d[y]++,q[++top]=y;
fa[x]=y;a[x]=v;q[++top]=x;
}
inline void erase(int x){
for(;top>x;top--)if(q[top<])d[-q[top]]--;
else fa[q[top]]=q[top],a[q[top]]=;
}
void solve(int l,int r,int k){
int mid=(l+r)>>,now=top;
for(int i=;i<=k;i++)if(G[i].l<=l&&r<=G[i].r){
int u=get(G[i].x),v=get(G[i].y);
if(u!=v)link(u,v,dis(G[i].x)==dis(G[i].y));
else if(dis(G[i].x)==dis(G[i].y)){
for(int i=l;i<=r;i++)puts("NO");erase(now);return;
}
swap(G[k--],G[i--]);
}
if(l==r)puts("YES");
else{
int i,j;for(i=,j=;i<=k;i++)if(G[i].l<=mid)swap(G[i],G[++j]);
solve(l,mid,j);
for(i=,j=;i<=k;i++)if(G[i].r>mid)swap(G[i],G[++j]);
solve(mid+,r,j);
}
erase(now);
}
map<int,int> mp[N];
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
n=read();t=read();
for(int i=;i<=t;i++){
int x=read(),y=read();if(x>y)swap(x,y);
if(mp[x][y])G[mp[x][y]].r=i-,mp[x][y]=;
else{
mp[x][y]=++m;G[m].x=x;G[m].y=y;G[m].l=i-;G[m].r=t;
}
}
for(int i=;i<=m;i++)if(++G[i].l>G[i].r)i--,m--;
for(int i=;i<=n;i++)fa[i]=i,d[i]=;
solve(,t,m);
}

总结:

思维能力亟待加强,还要多多cf

edu的难度比较符合我目前的水平,找个空多补一补。

【Educational Codeforces Round 22】的更多相关文章

  1. 【Educational Codeforces Round 19】

    这场edu蛮简单的…… 连道数据结构题都没有…… A.随便质因数分解凑一下即可. #include<bits/stdc++.h> #define N 100005 using namesp ...

  2. 【Educational Codeforces Round 38】D. Buy a Ticket 堆优化Dijkstra

    题意 给定一张无向图,对每个点$i\in S$求$\min_{j\in S} {2\times d(i,j)+a_j}$ 考虑多源多汇最短路会超时,换个角度考虑每个$j$,如果$j=i$,那么答案为$ ...

  3. 【Educational Codeforces Round 37】F. SUM and REPLACE 线段树+线性筛

    题意 给定序列$a_n$,每次将$[L,R]$区间内的数$a_i$替换为$d(a_i)$,或者询问区间和 这题和区间开方有相同的操作 对于$a_i \in (1,10^6)$,$10$次$d(a_i) ...

  4. 【Educational Codeforces Round 48】

    A:https://www.cnblogs.com/myx12345/p/9843001.html B:https://www.cnblogs.com/myx12345/p/9843021.html ...

  5. Educational Codeforces Round 22 E. Army Creation

    Educational Codeforces Round 22 E. Army Creation 题意:求区间[L,R]内数字次数不超过k次的这些数字的数量的和 思路:和求区间内不同数字的数量类似,由 ...

  6. CF codeforces A. New Year Garland【Educational Codeforces Round 79 (Rated for Div. 2)】

    A. New Year Garland time limit per test 1 second memory limit per test 256 megabytes input standard ...

  7. 【Educational Codeforces Round 38 (Rated for Div. 2)】 Problem A-D 题解

    [比赛链接] 点击打开链接 [题解] Problem A Word Correction[字符串] 不用多说了吧,字符串的基本操作 Problem B  Run for your prize[贪心] ...

  8. 【 Educational Codeforces Round 51 (Rated for Div. 2) F】The Shortest Statement

    [链接] 我是链接,点我呀:) [题意] [题解] 先处理出来任意一棵树. 然后把不是树上的边处理出来 对于每一条非树边的点(最多21*2个点) 在原图上,做dijkstra 这样就能处理出来这些非树 ...

  9. 【Educational Codeforces Round 53 (Rated for Div. 2) C】Vasya and Robot

    [链接] 我是链接,点我呀:) [题意] [题解] 如果|x|+|y|>n 显然.从(0,0)根本就没法到(x,y) 但|x|+|y|<=n还不一定就能到达(x,y) 注意到,你每走一步路 ...

随机推荐

  1. HTML、 CSS、 JavaScript三者的关系 1

    HTML. CSS. JavaScript三者的关系 网页主要由三部分组成: 结构( Structure) . 表现( Presentation) 和行为( Behavior)    HTML —— ...

  2. Oracle DB_LINK如何使用

    语句,或可通过可视化操作 -- Create database link create database link DBL_TESTconnect to UID identified by PSWus ...

  3. 【刷题】BZOJ 2038 [2009国家集训队]小Z的袜子(hose)

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...

  4. POJ3621:Sightseeing Cows——题解

    http://poj.org/problem?id=3621 全文翻译参自洛谷:https://www.luogu.org/problemnew/show/P2868 题目大意:一个有向图,每个点都有 ...

  5. HDU.2640 Queuing (矩阵快速幂)

    HDU.2640 Queuing (矩阵快速幂) 题意分析 不妨令f为1,m为0,那么题目的意思为,求长度为n的01序列,求其中不含111或者101这样串的个数对M取模的值. 用F(n)表示串长为n的 ...

  6. UVA.10881 Piotr's Ants (思维题)

    UVA.10881 Piotr's Ants (思维题) 题意分析 有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头.求解第T秒时 ...

  7. 【DP】【P2734】游戏 A Game

    传送门 Description 有如下一个双人游戏:N个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结 ...

  8. SpringMVC源码解析-DispatcherServlet启动流程和初始化

    在使用springmvc框架,会在web.xml文件配置一个DispatcherServlet,这正是web容器开始初始化,同时会在建立自己的上下文来持有SpringMVC的bean对象. 先从Dis ...

  9. 初学VS的目录结构

    工程目录下各文件的含义 一般大部分的文章可能介绍到上面就算结束了,但我这还没有.创建工程产生的各个文件都你知道是什么用的吗? 如果你是一个初学者,你可能会不知道(老手请跳过本文).Ok,我就带你逐一了 ...

  10. linux shell脚本攻略笔记

    前一阵子系统学习了下<linux shell脚本攻略>这本书.在此记录下自己的学习笔记 1. 输出颜色字符  echo -e "\e[1:41m" 1表示背景色   2 ...