ICPC 2019-2020 North-Western Russia Regional Contest 补题部分

已做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}depmxdeps=depsdeplca+depmndeplca),找到该点后,以该点为根节点重建树,那么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

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

对于两个点之间的路径个数我们可以根据递推求出
考虑i→ji\to jij直接的路径条数
我们可以考虑枚举中间点kkki→k→⋯→ji\to k\to \dots \to jikj(注意i→ki\to kik这条路径是表示直接路径不是间接路径)不难得出i→ji\to jij路径个数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)cntij=k=i+1j1cntkj(ik)
如果当前所求cnti→jcnt_{i\to j}cntij与题中所给路径个数有出处那么说明i→ji\to jij存在直接路径,否则不存在。

#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}cntij=cntik×cntkj,这里kkkiiijjj之间任意一个点即可,而没想的上述计数的方法。

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;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【dfs】数字

题目大意 给出x&#xff0c;问你不小于x&#xff0c;且由相同个数的4和7组成的最小的数 解题思路 对于奇数位和大于当前位数最大数的直接特判掉 对于其他的dfs枚举&#xff0c;因为如果一个位置放得比原数大&#xff0c;那么后面的都确定了&#xff0c;所以是O(n)的 code #…

【dfs】飞行棋

题目大意 给你一个n*m的网格&#xff0c;现在让你往里面填1~k&#xff08;有的位置已经填了&#xff09;&#xff0c;使其满足所有从(1,1)到(n,m)的路径不会经过相同的数字&#xff08;只能往下或往右&#xff09;&#xff0c;求方案数 解题思路 对于k<nm-1的&#xff0c;…

API测试工具SoapUI Postman对比分析

最近公司要引入API测试工具&#xff0c;经过调查和了解&#xff0c;最终决定在SoapUI 和 Postman两种工具之间做一个选择&#xff0c;两种工具在业界都很有名&#xff0c;相信很多人两种工具也都曾使用过。SoapUISoapUI是一个开源测试工具&#xff0c;通过soap/http来检查、调用…

[POI2008]STA-Station

之前都看过有换根dp&#xff0c;一直不知道是啥意思&#xff0c;本来弱弱树形dp都不太熟悉&#xff0c;不过今天工数课的时候突然想看一下&#xff0c;写个板子题练练吧。 对于我的理解&#xff0c;换根的题目一般是根不确定&#xff0c;而求得答案与根是谁有关&#xff0c;而…

Reports

试题hduoj 题意&#xff1a; 如果相邻的任意两个数相同的话&#xff0c;则输出NO&#xff0c;反之输出YES。 题解&#xff1a; 水题 我队友做的 代码&#xff1a; #include<bits/stdc.h> #define inf 1<<30 #define maxn 200000 using namespace std; int k…

【结论】分肉

题目大意 有两个数x,y&#xff0c;一轮中&#xff0c;如果x≤yx\leq yx≤y&#xff0c;那么xx,y-x&#xff0c;否则x-y,yy&#xff0c;回答经过k轮后较小的数 解题思路 可以发现xy是保持不变的&#xff0c;且x−yx2−x−y,x2>xy(x>y)x-yx\times 2-x-y,x\times 2>xy(…

在 Windows 上可以用 Docker 吗?| 洞见

简介Docker&#xff0c;或者准确一点说&#xff0c;容器技术&#xff0c;在近几年里几乎成为了应用分发和集群部署的默认技术了。背景部分&#xff0c;如果感兴趣&#xff0c;请参考闲谈集群管理模式一文。Docker 生态的成熟还有赖于其周边工具和实践模式的兴起。比如&#xff…

泰勒及洛朗展开学习笔记

2020-1024996 最近太忙了&#xff0c;今天好像没有写题&#xff0c;不过研究了一下数学hh。 2020.10.24今天又有工数课&#xff0c;我又没听&#xff0c;我记得上节工数课我看了换根dp&#xff0c;哦&#xff1f;好吧我没听过工数&#xff0c;那没事了&#xff0c;不过这次不敢…

【结论】串串串(nowcoder 20107-A)

正题 nowcoder 20107-A 题目大意 给你两个01串&#xff0c;有若干询问&#xff0c;每次询问两段长度相等的字串不同位数的奇偶性 解题思路 因为只用判断奇偶性&#xff0c;所以同时修改两个字符是不会改变结果的&#xff0c;那么可以直接将字串修改为只有0/1个1的串&#xf…

SmartSql For Asp.Net Core 最佳实践

常规操作安装 SmartSqlInstall-Package SmartSql安装 SmartSql.DIExtensionInstall-Package SmartSql.DIExtension配置SmartSqlConfig.xml写库&#xff08;Write&#xff09;必选 唯一节点读库&#xff08;Read&#xff09;可选 多节点配置PostgresqlPostgresql 客户端 NpgsqlI…

矩阵乘法学习记录

这要从校赛的一个区间与非操作题说起&#xff0c;群里大佬用的ddp思想使其满足结合律&#xff0c;但是我连矩阵乘法都不会于是从头开始学习矩阵乘法。 P3390 【模板】矩阵快速幂 和快速幂一模一样&#xff0c;只是把数乘换成矩阵乘&#xff0c;只需要定义结构体矩阵然后重载一…

51nod1600-Simple KMP【SAM,树链剖分】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1600 题目大意 给出一个字符串sss&#xff0c;每次在最后插入一个字符后求它的所有分别子串构出的failfailfail树的深度和。 1≤Q≤1051\leq Q\leq 10^51≤Q≤105 解题思路 考虑两个相等的子串长度为le…

课程 预编译框架,开发高性能应用 - 微软技术暨生态大会 2018

微软技术暨生态大会&#xff08;Tech Summit&#xff09;&#xff0c;2018 年在上海世博中心召开。这是最后一次的 Tech Summit 了&#xff1b;明年开始&#xff0c;中国大陆地区就要和其他国家和地区一样&#xff0c;进行全球 Ignite Tour 了。我也有幸成为分会场讲师团队的一…

【DP】方格计数(nowcoder 20107-B)

正题 nowcoder 20107-B 题目大意 在一个H*W的平面上&#xff0c;选择N个点&#xff08;坐标为非负整数&#xff09;&#xff0c;使得每个点之间的距离大于D&#xff0c;问你有多少种方案 解题思路 设fi,j,kf_{i,j,k}fi,j,k​为有i个格子&#xff0c;选择k个格子&#xff0c;…

YbtOJ#853-平面标记【整体二分,凸壳】

正题 题目链接:http://www.ybtoj.com.cn/contest/119/problem/3 题目大意 给出nnn个点(xi,yi)(x_i,y_i)(xi​,yi​)&#xff0c;mmm次给出(ki,ai)(k_i,a_i)(ki​,ai​)表示标记所有满足 yj>kixjaiy_j>\frac{k_i}{x_j^{a_i}}yj​>xjai​​ki​​的未标记点 求每个点…

Ocelot简易教程(五)之集成IdentityServer认证以及授权

最近比较懒&#xff08;编者注&#xff1a;作者不是真懒&#xff0c;而是在憋大招&#xff0c;他最近实现了把Ocelot的配置使用数据库存储&#xff09;&#xff0c;所以隔了N天才来继续更新第五篇Ocelot简易教程&#xff0c;本篇教程会先简单介绍下官方文档记录的内容然后在前几…

【启发式合并】【dfs】树数树(nowcoder 20107-C)

正题 nowcoder 20107-C 题目大意 给一棵树&#xff0c;让你构造一个序列a&#xff0c;使得a中的数互不相等&#xff0c;且相邻点是祖先的关系&#xff0c;回答序列最长长度 解题思路 书中的每个点可以把字数的两个序列连起来 考虑维护一个堆&#xff0c;存子树中的序列&…

CF848E-Days of Floral Colours【dp,分治NTT】

正题 题目链接:https://www.luogu.com.cn/problem/CF848E 题目大意 2n2n2n个花排成一个圆环&#xff0c;nnn种颜色每种两个&#xff0c;要求两个相同颜色之间最小距离为1,21,21,2或nnn。 对于一种染色方案的权值为&#xff1a;删除掉距离为nnn的颜色后&#xff0c;剩下的连续…

2020 China Collegiate Programming Contest Qinhuangdao Site 补题部分

已经补AEFGK E. Exam Results 枚举二分动态开点权值线段树O(nlogN)O(nlogN)O(nlogN) 智商太低&#xff0c;想不到什么贪心只能暴力数据结构维护 对于所有学生的最高成绩只可能是ai(1≤i≤n)a_i(1\leq i\leq n)ai​(1≤i≤n)或者最大的bib_ibi​&#xff0c;对于后面一种情况…

CCPC Training Class

杭电oj 题意&#xff1a; 字符串中出现次数最多的字母的次数是多少&#xff1f; 题解&#xff1a; 题目看不懂。。。又臭又长 懒得看。。 但是仔细看样例就会发现。。其实考的很简单 比赛时这题是我做的&#xff0c;以下为考试原码 代码&#xff1a; #include<string&…