【前言】
组队CF之帮wyl上橙,我和sc打小号上紫。
结果sc成功FST两题,wyl成功skipped。
我的小号幸存了qwq。

【题目】
原题地址

A.Minimum Integer

特判一下ddd是不是在[l,r][l,r][l,r]中,如果是那么答案就是x∗(rx+1)x*(\frac r x +1)x∗(xr​+1)

#include<bits/stdc++.h>
#define mkp make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;typedef double db;
typedef long long ll;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f;int read()
{int ret=0,f=1;char c=getchar();while(!isdigit(c)) {if(c=='-')f=0;c=getchar();}while(isdigit(c)) ret=ret*10+(c^48),c=getchar();return f?ret:-ret;
}int main()
{#ifndef ONLINE_JUDGEfreopen("A.in","r",stdin);freopen("A.out","w",stdout);
#endifint T=read();while(T--){int l=read(),r=read(),x=read();if(x<l || x>r){printf("%d\n",x);}else printf("%d\n",(r/x+1)*x);}return 0;
}

B.Accordion

模拟。

#include<bits/stdc++.h>
#define mkp make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;typedef double db;
typedef long long ll;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f,N=1e6+10;
int p[10],ans;
char s[N];int read()
{int ret=0,f=1;char c=getchar();while(!isdigit(c)) {if(c=='-')f=0;c=getchar();}while(isdigit(c)) ret=ret*10+(c^48),c=getchar();return f?ret:-ret;
}int main()
{#ifndef ONLINE_JUDGEfreopen("B.in","r",stdin);freopen("B.out","w",stdout);
#endifscanf("%s",s);;int n=strlen(s);memset(p,-1,sizeof(p));for(int i=0;i<n;++i) if(s[i]=='[') {p[1]=i;break;}for(int i=n-1;~i;--i) if(s[i]==']') {p[2]=i;break;}if(p[1]>p[2] || p[1]==-1 || p[2]==-1){puts("-1");return 0;}for(int i=p[1]+1;i<p[2];++i) if(s[i]==':'){p[3]=i;break;}for(int i=p[2]-1;i>p[1];--i) if(s[i]==':'){p[4]=i;break;}if(p[3]==-1 || p[4]==-1 || p[3]==p[4]) {puts("-1");return 0;}for(int i=p[3]+1;i<p[4];++i) if(s[i]=='|') ++ans;printf("%d\n",ans+4);return 0;
}

C.Division and Union

按左端点排序,判断和上一条线段位置关系分组。
若一条线段被另一条包含在过程中可以判掉。

#include<bits/stdc++.h>
#define mkp make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;typedef double db;
typedef long long ll;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f,N=1e5+10;
int n,bl[N];int read()
{int ret=0,f=1;char c=getchar();while(!isdigit(c)) {if(c=='-')f=0;c=getchar();}while(isdigit(c)) ret=ret*10+(c^48),c=getchar();return f?ret:-ret;
}struct seg
{int l,r,id;seg(int _l=0,int _r=0,int _id=0):l(_l),r(_r),id(_id){}
}a[N];
bool cmp(const seg&a,const seg&b)
{return a.l<b.l || (a.l==b.l && a.r<b.r);
}int main()
{#ifndef ONLINE_JUDGEfreopen("C.in","r",stdin);freopen("C.out","w",stdout);
#endifint T=read();while(T--){n=read();for(int i=1;i<=n;++i) a[i].l=read(),a[i].r=read(),a[i].id=i;sort(a+1,a+n+1,cmp);for(int i=1;i<=n;++i) bl[i]=-1;int las=0;for(int i=1;i<=n;++i) {//cerr<<a[i].l<<" "<<a[i-1].r<<endl;if(a[i].l>=a[las].l && a[i].r<=a[las].r) {bl[a[i].id]=bl[a[las].id];continue;}if(a[i].l>a[las].r) bl[a[i].id]=bl[a[las].id]^1;else bl[a[i].id]=bl[a[las].id];las=i;}bool fg=0;for(int i=1;i<=n;++i) if(bl[a[i].id]==0){fg=1;break;}if(!fg){puts("-1");}else {for(int i=1;i<=n;++i)printf("%d ",bl[i]+1);puts("");}}return 0;
}

D.GCD Counting

枚举质因子,bfs\text{bfs}bfs直径。注意多余的边和点什么的不要经过。

#include<bits/stdc++.h>
#define mkp make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;typedef double db;
typedef long long ll;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f,N=2e5+10;
int tot,n,pnum,rt,ans;
int bo[N],head[N],pri[N],dis[N],a[N];
map<int,bool>mp;
queue<int>q;int read()
{int ret=0,f=1;char c=getchar();while(!isdigit(c)) {if(c=='-')f=0;c=getchar();}while(isdigit(c)) ret=ret*10+(c^48),c=getchar();return f?ret:-ret;
}struct Tway{int v,w,nex;}e[N<<1];
void add(int u,int v,int w)
{e[++tot]=(Tway){v,w,head[u]};head[u]=tot;e[++tot]=(Tway){u,w,head[v]};head[v]=tot;
}
int gcd(int x,int y){return y?gcd(y,x%y):x;}void init()
{for(int i=2;i<N;++i){if(!bo[i]) pri[++pnum]=i;for(int j=1;j<=pnum && i*pri[j]<N;++j){bo[i*pri[j]]=1;if(!(i%pri[j])) break;}}
}
int bfs(int x,int p)
{q.push(x);mp.clear();mp[x]=1;dis[x]=1;int res=1;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i;i=e[i].nex){int v=e[i].v,w=e[i].w;//cerr<<u<<" "<<v<<" "<<endl;if(mp[v] || gcd(p,w)==1) continue; dis[v]=dis[u]+1;rt=v;res=dis[v];mp[v]=1;}}return res;
}void findtree(int x,int p)
{//cerr<<x<<" "<<p<<endl;rt=0;bfs(x,p);int res=bfs(rt,p);ans=max(ans,res);
}int main()
{#ifndef ONLINE_JUDGEfreopen("D.in","r",stdin);freopen("D.out","w",stdout);
#endifn=read();init();for(int i=1;i<=n;++i) a[i]=read();for(int i=1;i<n;++i){int u=read(),v=read();add(u,v,gcd(a[u],a[v]));}for(int p=1;p<=pnum;++p){memset(dis,0,sizeof(dis));for(int i=1;i<=n;++i) if(!dis[i] && gcd(a[i],pri[p])>1) findtree(i,pri[p]);}printf("%d\n",ans);return 0;
}

E.Polycarp’s New Job

将短边放前面,记录最大值判断一下。

#include<bits/stdc++.h>
#define mkp make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;typedef double db;
typedef long long ll;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f;
int m,mxx,mxy;int read()
{int ret=0,f=1;char c=getchar();while(!isdigit(c)) {if(c=='-')f=0;c=getchar();}while(isdigit(c)) ret=ret*10+(c^48),c=getchar();return f?ret:-ret;
}int main()
{#ifndef ONLINE_JUDGEfreopen("E.in","r",stdin);freopen("E.out","w",stdout);
#endifm=read();while(m--){char op[2];int x,y;scanf("%s%d%d",op,&x,&y);if(x>y) swap(x,y);if(op[0]=='+') mxx=max(mxx,x),mxy=max(mxy,y);else puts((mxx<=x && mxy<=y)?"YES":"NO");}return 0;
}

F.Trucks and Cities

我们设fi,j,kf_{i,j,k}fi,j,k​表示从iii城市到jjj城市,加油kkk次,需要跑的最远一段路程。
显然fi,i+1,1=ai+1−aif_{i,i+1,1}=a_{i+1}-a_ifi,i+1,1​=ai+1​−ai​
若我们固定了iii,当kkk越大,最后一次加油的位置一定单调右移。
于是我们可以枚举这一阶段最后一次加油是在什么地方,随着这个位置右移,上一阶段最后一次加油位置一定也右移。
这个东西相当于将行程拆成了两部分i−&gt;j,j−&gt;ki-&gt;j,j-&gt;ki−>j,j−>k。
转移也没什么好说的。
复杂度就是O(n3+m)O(n^3+m)O(n3+m)的了。

#include<bits/stdc++.h>
#define mkp make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;typedef double db;
typedef long long ll;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f,N=405;
int n,m,a[N],f[N][N][N];
ll ans;int read()
{int ret=0,f=1;char c=getchar();while(!isdigit(c)) {if(c=='-')f=0;c=getchar();}while(isdigit(c)) ret=ret*10+(c^48),c=getchar();return f?ret:-ret;
}int main()
{#ifndef ONLINE_JUDGEfreopen("F.in","r",stdin);freopen("F.out","w",stdout);
#endifn=read();m=read();for(int i=1;i<=n;++i) a[i]=read();for(int i=1;i<n;++i) {for(int j=i+1;j<=n;++j) f[i][j][1]=a[j]-a[i];for(int t=2;t+i<=n;++t){int las=i+t-1;for(int j=i+t;j<=n;++j){while(las+1<j && max(f[i][las][t-1],a[j]-a[las])>max(f[i][las+1][t-1],a[j]-a[las+1])) ++las;f[i][j][t]=max(f[i][las][t-1],a[j]-a[las]);}}}for(int i=1;i<=m;++i) {int s=read(),t=read(),c=read(),r=read();ans=max(ans,(ll)f[s][t][min(t-s,r+1)]*c);}printf("%lld\n",ans);return 0;
}

G.(Zero XOR Subset)-less

这是一道线性基裸题。
首先无解当且仅当所有数异或为0,否则显然可以构造出解。
我们只需要先让所有数先做一个前缀异或,然后按顺序插入线性基即可。
最后线性基中的基底个数就是答案。

#include<bits/stdc++.h>
#define mkp make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;typedef double db;
typedef long long ll;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f,N=3e5+10;
int n,a[N];int read()
{int ret=0,f=1;char c=getchar();while(!isdigit(c)) {if(c=='-')f=0;c=getchar();}while(isdigit(c)) ret=ret*10+(c^48),c=getchar();return f?ret:-ret;
}
void getfail(){puts("-1");exit(0);}struct LinearBase
{int ans,b[100];void insert(int x){int i,j;for(i=30;~i;i--) if(x>>i&1){if(b[i]) x^=b[i];else break;}if(!x) return;b[i]=x;++ans;for(j=i-1;~j;j--) if(b[i]>>j&1) b[i]^=b[j];for(j=i+1;j<31;j++) if(b[j]>>i&1) b[j]^=b[i];}
}T;int main()
{#ifndef ONLINE_JUDGEfreopen("F.in","r",stdin);freopen("F.out","w",stdout);
#endifn=read();for(int i=0;i<n;++i) a[i]=read();for(int i=1;i<n;++i) a[i]^=a[i-1];if(!a[n-1])getfail();for(int i=0;i<n;++i) T.insert(a[i]);printf("%d\n",T.ans);return 0;
}

【CF套题】 Educational Codeforces Round 58相关推荐

  1. szu cf套题训练Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)A~D题解报告

    A. Math Problem 题目大意:就是给你n个线段,你自己再添加一个线段d使得d和所有的线段都有交点,求d这个线段的最小长度是多少 解题思路: 1.首先看d线段的左端点,就是左端点选取的是所有 ...

  2. 【CF比赛】Educational Codeforces Round 102 (Rated for Div. 2)

    题目来源 Educational Codeforces Round 102 (Rated for Div. 2) A. Replacing Elements 只要判断最大值是否小于等于d,或者第一个值 ...

  3. Educational Codeforces Round 58

    D. GCD Counting 题意: 给出n个点的树,每个点有一个权值,找出一条最长的路径使得路径上所有的点的gcd>1 题解: gcd>1的一定不会有很多.所以暴力搞一下就行,不需要点 ...

  4. Educational Codeforces Round 103 (Rated for Div. 2)前四题

    Educational Codeforces Round 103 (Rated for Div. 2) 第二次被别人hack,悲 A - K-divisible Sum 题意 给定两个整数 n,kn, ...

  5. Educational Codeforces Round 73 (Rated for Div. 2) E. Game With String 思维博弈 好题(2500)

    传送门 文章目录 题意: 思路: 题意: 思路: 我们将每一段...拿出来看成若干段,将其分成以下四种情况: (1)len<b(1)len<b(1)len<b (2)b≤len< ...

  6. Educational Codeforces Round 40千名记

    人生第二场codeforces.然而遇上了Education场这种东西 Educational Codeforces Round 40 下午先在家里睡了波觉,起来离开场还有10分钟. 但是突然想起来还 ...

  7. Educational Codeforces Round 138 (Rated for Div. 2)-赛后总结

    Dashboard - Educational Codeforces Round 138 (Rated for Div. 2) - Codeforces 总结一个教训就是不要心急,特别是对于一些题目, ...

  8. Educational Codeforces Round 36 (Rated for Div. 2) 题解

    Educational Codeforces Round 36 (Rated for Div. 2) 题目的质量很不错(不看题解做不出来,笑 Codeforces 920C 题意 给定一个\(1\)到 ...

  9. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

最新文章

  1. 频率分布直方图组距如何确定_小猿圈Python开发之绘制频率分布直方图示例
  2. V神最新演讲:以太坊2.0的分片交易
  3. 用命令行执行java代码
  4. 为什么嫁人就选程序员!
  5. 学法减分小程序可用可运营源码附带安装教程
  6. haneWIN搭建Win10 NFS服务器
  7. tp5第三方支付-支付宝
  8. Mac版Lync无法登陆问题(登录设置)
  9. 广告中的CPM、CPC、CPA解释
  10. Xilinx FPGA的DNA是什么?
  11. 【STM32H7的DSP教程】第16章 DSP功能函数-数据拷贝,数据填充和浮点转定点
  12. 两对等位基因控制一对相对性状的规律(基因互作)
  13. linux 4g 拨号,4G模块Linux PPP拨号说明
  14. python 需要在什么环境下运行_运行Python需要什么环境?也需要虚拟机吗?
  15. 【应用】1200PLC实现三层电梯模拟控制
  16. D3 CSV表格文件的读取详解
  17. Chapter5 生长因子、受体和癌症
  18. 88个国外音乐网站推荐
  19. 20ZR暑期集训 简单数据结构
  20. Java进击框架:Spring(一)

热门文章

  1. 李梁北京大学 计算机,同样是录取通知书:清华优雅,北大大气,看到国科大,网友:霸气...
  2. 名字大作战小游戏代码(含注释)
  3. 基于vue的恋爱日常记录网站 计算机毕业设计 恋爱日常记录网站
  4. 快来和阿里巴巴CTO做同事 阿里巴巴CTO线春季2023届校园招聘正式启动!
  5. 诗经 - 小雅 - 车攻
  6. 蚂蚁金服内推四面:PDF超过6000页
  7. 性能优化-Android之ANR分析解决 traces.txt文件分析
  8. HashMap趣味问答
  9. 新浪页游助手,热门页游 全网覆盖
  10. PHP中会话处理函数的逻辑流程