已做A、M,E和H思路已经有了没调AC
已补BEJH
最终已完成ABEJHM

B - Bad Treap

大佬题解
感觉这题就很玄学。。。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef pair<double,int> pdi;
typedef pair<int,int> pii;
typedef long long ll;
const int N=500010;
vector<pdi> v;
vector<int> ans;
int main()
{IO;int T=1;//cin>>T;while(T--){int n;cin>>n;for(int i=1;i<=50000;i++) if(sin(i)>0)v.push_back({sin(i),i});sort(v.begin(),v.end());for(int i=-25000;i<=25000;i++)ans.push_back(i*v[0].second);for(int i=0;i<n;i++) cout<<ans[i]<<'\n';}return 0;
}

E - Equidistant

队友想的方法:先以1为根节点跑一边dfs,记录每个节点的深度,然后把m个关键点中,深度最大的点mx和深度最小的点mn拿出来,找到这两个点路径上的中点s(depmx−deps=deps−deplca+depmn−deplcadep_{mx}-deps=dep_s-dep_{lca}+dep_{mn}-dep_{lca}depmx​−deps=deps​−deplca​+depmn​−deplca​),找到该点后,以该点为根节点重建树,那么m个关键的的深度一定相等才满足题意。

感觉上述方法没有错但是一直wa14,最后我把以1为根节点跑dfs改成以任意一个关键点先跑一边dfs,那么深度最小的点就是根节点,上述式子都不变就AC了,很奇怪

最终队友举了个反例找到了以1为根跑dfs为什么会出问题。我hack我自己hhh

8 3
1 2
2 3
3 7
3 4
4 5
4 6
7 8
5 6 8
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=200010;
int h[N],e[2*N],ne[2*N],idx;
int n,m,c[N];
bool st[N];
int fa[N],dep[N];
void add(int a,int b)
{e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
void dfs(int u,int p)
{fa[u]=p;dep[u]=dep[p]+1;for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(j==p) continue;dfs(j,u);}
}
int lca(int a,int b)
{while(a) {st[a]=1;a=fa[a];}while(b){if(st[b]) return b;b=fa[b];}
}
int main()
{IO;int T=1;//cin>>T;while(T--){memset(h,-1,sizeof h);cin>>n>>m;for(int i=1;i<n;i++){int a,b;cin>>a>>b;add(a,b),add(b,a);}for(int i=1;i<=m;i++) cin>>c[i];dfs(c[1],0);//以任意一个关键跑dfs//dfs(1,0); 以1为根节点跑dfsint mx=-1,mn=-1;for(int i=1;i<=m;i++){if(mx==-1||dep[mx]<dep[c[i]]) mx=c[i];//最大深度点的编号if(mn==-1||dep[mn]>dep[c[i]]) mn=c[i];//最小深度点的编号}int p=lca(mn,mx);// 向上标记求lcaif((dep[mx]+2*dep[p]-dep[mn])%2){cout<<"NO\n";continue;}int deps=(dep[mx]+2*dep[p]-dep[mn])/2;int k=dep[mx]-deps;int s=mx;while(k--) s=fa[s];dfs(s,0);bool ok=1;for(int i=2;i<=m;i++)if(dep[c[i]]!=dep[c[i-1]]) {ok=0;break;}if(ok) {cout<<"YES\n";cout<<s<<'\n';}else cout<<"NO\n";}return 0;}

J - Just the Last Digit

对于任意两个点iii,jjj来说,两个点是否存在一条边最终只可能有1条路径的差别,因此只需要知道路径个数的最后一位即可区分是否该两点直接有直接路径相连。

对于两个点之间的路径个数我们可以根据递推求出
考虑i→ji\to ji→j直接的路径条数
我们可以考虑枚举中间点kkk,i→k→⋯→ji\to k\to \dots \to ji→k→⋯→j(注意i→ki\to ki→k这条路径是表示直接路径不是间接路径)不难得出i→ji\to ji→j路径个数cnti→j=∑k=i+1j−1cntk→j(i→k)cnt_{i\to j}=\sum_{k=i+1}^{j-1}{cnt_{k\to j}}(i\to k)cnti→j​=∑k=i+1j−1​cntk→j​(i→k)
如果当前所求cnti→jcnt_{i\to j}cnti→j​与题中所给路径个数有出处那么说明i→ji\to ji→j存在直接路径,否则不存在。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=510;
char g[N][N];
int d[N][N];
int n;
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>g[i]+1;for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){int cnt=0;for(int k=i+1;k<j;k++)if(d[i][k]) cnt=(cnt+g[k][j]-'0')%10;if(cnt!=g[i][j]-'0') d[i][j]=1;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)cout<<d[i][j];cout<<'\n';}}return 0;
}

我看到这个题给的条件时根本无从下述,我心里想给我路径个数可能都不会求,题目中只给了路径个数%10的结果。

当时心里一直在想一个公式cnti→j=cnti→k×cntk→jcnt_{i\to j}=cnt_{i\to k}×cnt_{k\to j}cnti→j​=cnti→k​×cntk→j​,这里kkk是iii与jjj之间任意一个点即可,而没想的上述计数的方法。

H - High Load Database

队友想的,二分+二分两个log,由于记忆化不会被数据卡掉。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=1000010;
ll a[N],s[N];
int ans[N];
int n;
ll mx;
void solve(int t)
{ans[t]=0;if(t<mx) return;  for(int i=1;i<=n;i++){int l=i,r=n;while(l<r){int mid=l+r+1>>1;if(s[mid]-s[i-1]<=t) l=mid;else r=mid-1;}i=r;ans[t]++;}
}
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];mx=max(mx,a[i]);s[i]=s[i-1]+a[i];}int q;cin>>q;memset(ans,-1,sizeof ans);while(q--){int t;cin>>t;if(ans[t]!=-1) {if(ans[t]) cout<<ans[t]<<'\n';else cout<<"Impossible"<<'\n';}else{solve(t);if(ans[t]) cout<<ans[t]<<'\n';else cout<<"Impossible"<<'\n';}}}return 0;}

ICPC 2019-2020 North-Western Russia Regional Contest 补题部分相关推荐

  1. ICPC North Western European Regional Contest 2019 E. Expeditious Cubing(浮点数处理)

    题目链接 思路:先将前四次时间按照升序排序. 后三次时间的和如果小于给出的标准3,那么就inf,如果前三次的和大于标准时间 3那么就impossible,第三种情况就是,用标准时间 * 3 - 第二长 ...

  2. 2019-2020 ICPC Asia Hong Kong Regional Contest 补题(部分)

    codeforces原题链接 大佬题解 B - Binary Tree 每个人每次一定拿走奇数(2k−12^k-12k−1)个节点,如果先手必胜不难发现两人轮流拿最终一定拿奇数次(每次奇数个节点)说明 ...

  3. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest 补题

    题目链接 http://codeforces.com/gym/101667 参考题解 B - Connect3 简要题意: 给定 4×44×44×4 的棋盘玩 Connect3Connect 3Con ...

  4. ICPC Central Russia Regional Contest (CRRC 19)

    ICPC Central Russia Regional Contest (CRRC 19) 文章目录 ICPC Central Russia Regional Contest (CRRC 19) A ...

  5. 2021-2022 ICPC, NERC, Southern and Volga Russian Regional Contest Smash the Trash(二分)

    2021-2022 ICPC, NERC, Southern and Volga Russian Regional Contest Smash the Trash(二分) 链接 题意: 思路:二分答案 ...

  6. 2021-2022 ICPC, NERC, Southern and Volga Russian Regional Contest X-Magic Pair(gcd)

    2021-2022 ICPC, NERC, Southern and Volga Russian Regional Contest X-Magic Pair(gcd) 链接 题意:给出a,b,有两种选 ...

  7. 2019-2020 ICPC, NERC, Southern and Volga Russian Regional Contest 部分题解ABFHJLN

    2020-10-10为了准备CCPC,师兄下午拉了场ICPC练习让我们模拟,负责读题的菜鸡晚上回来重新做了模拟场上有思路的题QAQ 文章目录 A - Berstagram B - The Feast ...

  8. 2020-2021 ICPC, NERC, Southern and Volga Russian Regional Contest K. The Robot

    翻译: 有一个机器人在一个没有尽头的方格场上.最初,机器人位于坐标为(0,0)的单元中.他将执行由一串大写拉丁字母"L"."R"."D".& ...

  9. ACMB2:2019 ACM-ICPC North America Quali?cation Contest Solution Outlines

    B组题真难啊. D - Missing Numbers Kattis - missingnumbers A - Circuit Math Kattis - circuitmath 这俩题是水题,不说了 ...

最新文章

  1. freeradius 启动报错Refusing to start with libssl version OpenSSL 1.0.1
  2. php中json_encode中文编码问题分析
  3. Sqlserver:谈索引优化需要注意的几个方面
  4. [Qt教程] 第31篇 网络(一)Qt网络编程简介
  5. MySQL高级 - 锁 - InnoDB行锁 - 行锁升级为表锁
  6. hdu 2196 叶子节点最长距离(树DP)
  7. 我的世界服务器显示不出地图,为什么我的世界服务器地图加载不了
  8. Android实现多条Toast快速显示(强制中止上一条Toast的显示)
  9. 各个音阶的频率_声音各个频率的还原
  10. 网站发布的文章如何快速被收录?
  11. 首款基于龙芯的域名系统服务器发布,首款基于龙芯CPU的国产域名服务器发布
  12. iOS UIKit基本概念
  13. 怎么将小程序添加到我的小程序?
  14. GeoServer发布tif和Img格式影像(可去黑边)
  15. iOS 17 开放侧载,微信双开要来了?
  16. 19.调整数组奇偶数
  17. SQL注入一句话木马(load_file/out file)
  18. Lua环境搭建以及开发工具
  19. Intellij IDEA中文版
  20. 知识付费存在的问题及未来的发展

热门文章

  1. 数据结构——最小生成树之克鲁斯卡尔算法(Kruskal)
  2. leedcode344. 反转字符串
  3. linux正向连接shell_[经验] Linux 怎么连接 Xshell?
  4. [JavaWeb-HTML]HTML标签_表单标签
  5. C++ 多态实现的三个条件
  6. [C++STL]vector容器用法介绍
  7. [蓝桥杯][2014年第五届真题]分糖果-模拟
  8. ipa在线安装搭建_三种越狱工具安装方法
  9. 查看node的位置_升级Node版本RN项目运行报错cb.apply is not a function
  10. BDFeatureMatch_yalmip_vlfeat