Codeforces Round #620 (Div. 2) A-F代码 (暂无记录题解)
A. Two Rabbits (手速题)
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- int main(){
- int t;
- cin>>t;
- while(t--){
- ll x,y,a,b;
- cin>>x>>y>>a>>b;
- ll sum = a+b;
- if((y-x)%sum == ){
- cout<<(y-x)/sum<<endl;
- }
- else{
- cout<<-<<endl;
- }
- }
- return ;
- }
B. Longest Palindrome (模拟 枚举)
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- int main(){
- int n,m;
- cin>>n>>m;
- vector<string> v;
- bool vis[n];
- memset(vis,,sizeof(vis));
- for(int i = ;i<n;i++){
- string s;
- cin>>s;
- v.push_back(s);
- }
- bool flag = false;
- string mid = "",ans = "";
- for(int i = ;i<n;i++){
- string t = v[i];
- reverse(t.begin(),t.end());
- if(!flag && t == v[i]) {
- flag = true;
- mid = v[i];
- continue;
- }
- if(flag && t == v[i]) continue;
- for(int j = ;j<n;j++){
- if(v[j] == t && vis[j] == ){
- ans+=v[i];
- vis[i] = vis[j] = ;
- break;
- }
- }
- }
- string t = ans;
- reverse(t.begin(),t.end());
- ans+=mid,ans+=t;
- if(ans.length() == ){
- cout<<;return ;
- }
- cout<<ans.length()<<endl;
- cout<<ans;
- return ;
- }
C. Air Conditioner (模拟 区间覆盖)
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int maxn = ;
- struct node{
- ll t,l,h;
- ll l1,r;
- bool operator < (node &x)const {
- return t<x.t;
- }
- }c[maxn];
- int main(){
- int q;
- cin>>q;
- while(q--){
- ll n,m;
- cin>>n>>m;
- for(int i = ;i<=n;i++){
- cin>>c[i].t>>c[i].l>>c[i].h ;
- }
- sort(c+,c++n);
- c[].r = c[].l1 = m;
- bool flag = true;
- for(int i = ;i<=n;i++){
- ll d = c[i].t - c[i-].t;
- ll R = c[i-].r + d;
- ll L = c[i-].l1 - d;
- if(L>c[i].h || R< c[i].l){
- flag = false;
- // cout<<"De"<<i<<endl;
- break;
- }
- c[i].r = min(R,c[i].h);
- c[i].l1 = max(L,c[i].l);
- }
- if(flag) cout<<"YES"<<endl;
- else cout<<"NO"<<endl;
- }
- return ;
- }
D. Shortest and Longest LIS(贪心 构造)
- #include<bits/stdc++.h>
- using namespace std;
- void solve(){
- int n;
- string s;
- cin>>n;
- cin>>s;
- int Min[n];
- int t = n;
- for(int i = ;i<s.length();i++){
- int len = ,indx = i;
- if(s[i] == '<'){
- while(s[i]=='<'){
- len++;
- i++;
- }
- }
- for(int j = i;j>=i-len;j--){
- Min[j] = t,t--;
- }
- }
- if(t) Min[n-] = t;
- t = ;
- int Max[n];
- for(int i = ;i<s.length();i++){
- int len = ,indx = i;
- if(s[i] == '>'){
- while(s[i]=='>'){
- len++;
- i++;
- }
- }
- for(int j = i;j>=i-len;j--){
- Max[j] = t,t++;
- }
- }
- if(t == n) Max[n-] = t;
- for(int i = ;i<n;i++) cout<<Min[i]<<" ";
- cout<<endl;
- for(int i = ;i<n;i++) cout<<Max[i]<<" ";
- cout<<endl;
- }
- int main(){
- int t;
- cin>>t;
- while(t--){
- solve();
- }
- return ;
- }
E. 1-Trees and Queries (最近公共祖先)
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int maxbit = ;
- const int maxn = 1e5+;
- vector<int> G[maxn];
- int depth[maxn];
- int fa[maxn][maxbit];
- int Log[maxn];
- int N;
- void pre(){
- Log[] = -;
- Log[] = ,Log[] = ;
- for(int i = ;i<maxn;i++) Log[i] = Log[i/] + ;
- }
- void dfs(int cur,int father){//dfs预处理
- depth[cur] = depth[father] + ;//当前结点的深度为父亲结点+1
- fa[cur][] = father;//更新当前结点的父亲结点
- for(int j = ;(<<j)<=N;j++){//倍增更新当前结点的祖先
- fa[cur][j] = fa[fa[cur][j-]][j-];
- }
- for(int i = ;i<G[cur].size() ;i++){
- if(G[cur][i] != father) {//dfs遍历
- dfs(G[cur][i],cur);
- }
- }
- }
- int LCA(int u,int v){
- if(depth[u]<depth[v]) swap(u,v);
- int dist = depth[u] - depth[v];//深度差
- while(depth[u]!=depth[v]){//把较深的结点u倍增到与v高度相等
- u = fa[u][Log[depth[u]-depth[v]]];
- }
- if(u == v) return u;//如果u倍增到v,说明v是u的LCA
- for(int i = Log[depth[u]];i>=;i--){//否则两者同时向上倍增
- if(fa[u][i]!=fa[v][i]){//如果向上倍增的祖先不同,说明是可以继续倍增
- u = fa[u][i];//替换两个结点
- v = fa[v][i];
- }
- }
- return fa[u][];//最终结果为u v向上一层就是LCA
- }
- int main()
- {
- pre();
- cin>>N;
- for(int i = ;i<N;i++){
- int u,v;
- cin>>u>>v;
- G[u].push_back(v),G[v].push_back(u);
- }
- dfs(,);
- int q;cin>>q;
- while(q--){
- int x,y,a,b,k;
- cin>>x>>y>>a>>b>>k;
- int t1 = LCA(a,b),t2 = LCA(a,x),t3 = LCA(a,y),t4 = LCA(b,x),t5 = LCA(b,y);
- int dis = abs(depth[t1]-depth[a])+abs(depth[t1]-depth[b]);
- if(dis% == k% && dis <=k ){
- // cout<<"De1"<<endl;
- cout<<"YES"<<endl;
- continue;
- }
- int dis1 = abs(depth[t2]-depth[a])+abs(depth[t2]-depth[x]);
- int dis2 = abs(depth[t5]-depth[b])+abs(depth[t5]-depth[y]);
- if( (dis1+dis2+)% == k% && dis1+dis2+ <= k){
- // cout<<"de2"<<endl;
- cout<<"YES"<<endl;
- continue;
- }
- dis1 = abs(depth[t3]-depth[a])+abs(depth[t3]-depth[y]);
- dis2 = abs(depth[t4]-depth[b])+abs(depth[t4]-depth[x]);
- if((dis1+dis2+)% == k% && dis1+dis2+ <= k){
- // cout<<"de3"<<endl;
- cout<<"YES"<<endl;
- continue;
- }
- cout<<"NO"<<endl;
- }
- return ;
- }
F2. Animal Observation (hard version) (dp 滑动窗口 线段树区间更新最大值查询)
- #include<bits/stdc++.h>
- using namespace std;
- const int maxn = 4e4+;
- int dp[][maxn];
- int val[][maxn];
- int sum[][maxn];
- int n,m,k;
- struct node{
- int l,r;
- int Max,lz;
- }seg_t[maxn*];
- void build(int l,int r,int p){
- seg_t[p].l = l,seg_t[p].r = r;
- if(l == r) {
- seg_t[p].Max = ;return ;
- }
- int mid = (l+r)>>;
- build(l,mid,p*);
- build(mid+,r,p*+);
- seg_t[p].Max = max(seg_t[p*].Max ,seg_t[p*+].Max );
- }
- void pushdown(int k){
- seg_t[k*].lz +=seg_t[k].lz ;
- seg_t[k*+].lz +=seg_t[k].lz ;
- seg_t[k*].Max +=seg_t[k].lz ;
- seg_t[k*+].Max +=seg_t[k].lz ;
- seg_t[k].lz = ;
- }
- void upd(int L,int R,int p,int v){
- if(seg_t[p].l == L && seg_t[p].r == R){
- seg_t[p].lz +=v;
- seg_t[p].Max +=v;
- return;
- }
- if(seg_t[p].lz ) pushdown(p);
- int mid = (seg_t[p].l + seg_t[p].r )>>;
- if(R<=mid) upd(L,R,p*,v);
- else if(L>mid) upd(L,R,p*+,v);
- else{
- upd(L,mid,p*,v);
- upd(mid+,R,p*+,v);
- }
- seg_t[p].Max = max(seg_t[p*].Max ,seg_t[p*+].Max );
- }
- int query(int p,int L,int R){
- if(seg_t[p].l == L && seg_t[p].r == R) return seg_t[p].Max ;
- if(seg_t[p].lz ) pushdown(p);
- int mid = (seg_t[p].l +seg_t[p].r)>>;
- if(R<=mid) return query(p*,L,R);
- else if(L>mid) return query(p*+,L,R);
- else return max(query(p*,L,mid),query(p*+,mid+,R));
- }
- int main(){
- cin>>n>>m>>k;
- for(int i = ;i<=n;i++){
- for(int j = ;j<=m;j++) {
- cin>>val[i][j];
- sum[i][j] = sum[i][j-] + val[i][j];
- }
- }
- for(int i = ;i<=m-k+;i++){
- dp[][i] = sum[][i+k-] - sum[][i-]+sum[][i+k-]-sum[][i-];
- }
- for(int i = ;i<=n;i++){
- memset(seg_t,,sizeof(seg_t));
- build(,*m,);
- for(int j = ;j<=m;j++) upd(j,j,,dp[i-][j]);
- for(int j = ;j<=k;j++) upd(,j,,-val[i][j]);
- for(int j = ;j<=m-k+;j++){
- dp[i][j] = max(dp[i][j],query(,,m)+sum[i][j+k-]-sum[i][j-]+sum[i+][j+k-]-sum[i+][j-]);
- upd(max(,j-k+),j,,val[i][j]);
- upd(j+,j+k,,-val[i][j+k]);
- }
- }
- int ans = ;
- for(int i = ;i<=m;i++) ans = max(ans,dp[n][i]);
- cout<<ans;
- return ;
- }
Codeforces Round #620 (Div. 2) A-F代码 (暂无记录题解)的更多相关文章
- Codeforces Round #620 (Div. 2)
Codeforces Round #620 (Div. 2) A. Two Rabbits 题意 两只兔子相向而跳,一只一次跳距离a,另一只一次跳距离b,每次同时跳,问是否可能到同一位置 题解 每次跳 ...
- Codeforces Round #573 (Div. 1) 差F
Codeforces Round #573 (Div. 1) E 题意:二维平面上有 n 个点,你可以放至多 m 条直线使得 (0,0) 与每个点的连线至少与一条直线相交.求原点与所有直线的距离最小值 ...
- Codeforces Round #541 (Div. 2) (A~F)
目录 Codeforces 1131 A.Sea Battle B.Draw! C.Birthday D.Gourmet choice(拓扑排序) E.String Multiplication(思路 ...
- Codeforces Round #532 (Div. 2):F. Ivan and Burgers(贪心+异或基)
F. Ivan and Burgers 题目链接:https://codeforces.com/contest/1100/problem/F 题意: 给出n个数,然后有多个询问,每次回答询问所给出的区 ...
- Codeforces Round #346 (Div. 2) E F
因为很久没有个人认真做题了 昨天晚上开了场虚拟cf来锻炼个人手速 选的是第一次做cf的场 那时候7出3还被hack...之后也没补题 这次做的时候顺便回忆了一下以前比赛的时候是怎么想的 发现经验还是很 ...
- Codeforces Round #600 (Div. 2)E F
题:https://codeforces.com/contest/1253/problem/E 题意:给定n个信号源,俩个参数x和s,x代表这个信号源的位置,s代表这个信号源的波及长度,即这个信号源可 ...
- Codeforces Round #322 (Div. 2) E F
E. Kojiro and Furrari 题意说的是 在一条直线上 有n个加油站, 每加一单位体积的汽油 可以走1km 然后每个加油站只有一种类型的汽油,汽油的种类有3种 求从起点出发到达终点要求使 ...
- Codeforces Round #506 (Div. 3) 1029 F. Multicolored Markers
CF-1029F 题意: a,b个小正方形构造一个矩形,大小为(a+b),并且要求其中要么a个小正方形是矩形,要么b个小正方形是矩形. 思路: 之前在想要分a,b是否为奇数讨论,后来发现根本不需要.只 ...
- Codeforces Round #620 (Div. 2) D
构造一个排列,要求相邻之间的数满足给定的大小关系,然后构造出两个序列,一个序列是所有可能的序列中LIS最长的,一个所有可能的序列中LIS最短的 最短的构造方法:我们考虑所有单调递增的部分,可以发现要让 ...
随机推荐
- qt creator源码全方面分析(2-3)
目录 External Tool Specification Files 文件名 位置 文件格式 主要标签 描述标签 可执行规范标签 示例 External Tool Specification Fi ...
- 杭电-------2052Picture(C语言)
#include<stdio.h> int main() { int width, height; int i, j; while (~scanf("%d %d", & ...
- 12.python内置模块之sys模块介绍
python的sys模块是与python解释器交互的一个接口,提供对解释器使用或维护的一些变量的访问,即与解释器强烈交互的函数. sys模块的常用函数: 1.sys.argv:命令行参数列表.第一个元 ...
- 「Flink」使用Java lambda表达式实现Flink WordCount
本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...
- centos7下查看mysql配置文件适用顺序
mysql --help|grep 'my.cnf' [root@izm5e2q95pbpe1hh0kkwoiz ~]# mysql --help|grep 'my.cnf' order of pre ...
- Spring Boot从入门到精通(一)搭建第一个Spring Boot程序
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- JAVA系统架构高并发解决方案 分布式缓存 分布式事务解决方案
JAVA系统架构高并发解决方案 分布式缓存 分布式事务解决方案
- #《Essential C++》读书笔记# 第七章 异常处理
基础知识 异常处理机制有两个主要成分:异常的鉴定和发出,以及异常的处理方式.通常,不论是membe function和non-member function,都有可能产生异常以及处理异常.异常出现后, ...
- Electron+Vue – 基础学习(1): 创建项目
Electron 和 Vue 都是干啥的,就不做过多介绍了,可以去官网瞅瞅.下面总结 Electron+Vue 创建项目,Electron + Vue 创建项目实际上相当于:创建Vue项目 + Ele ...
- vs2015 编译boost库
1.下载boost官网安装包. https://dl.bintray.com/boostorg/release/1.66.0/binaries/ 注意:这里一定要选择好boost版本 如: boos ...