整体来说,这一场的质量比较高,但是题意也有些难懂。

E.Electronic Circuit

题意:  给你N个点,M根线,问它是否是一个合法的电路。

思路:  一个合法的电路,经过一些串联并联关系,最后有一个点是正极,一个是负极,我们就来模拟这个串联的过程即可,并联的关系会因为我们使用了set而抵消,所以可以不去管它。  模拟串联: 我们选择一个度数为2的点,删去它与两边的点u,v的连线,然后连接u-v,知道不存在度数为2的点。 最后当有两个点度数为1,而且不存在度数为大于大于2的点,则合法。

(选择set其实比较巧妙,因为不用考虑并联。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
set<int>S[maxn]; queue<int>q;
int main()
{
int N,M,u,x,y;
scanf("%d%d",&N,&M);
rep(i,,M){
scanf("%d%d",&x,&y);
S[x].insert(y); S[y].insert(x);
}
rep(i,,N) if(S[i].size()==) q.push(i);
while(!q.empty()){
u=q.front(); q.pop();
if(S[u].size()!=) continue;
x=*S[u].begin(); S[u].erase(S[u].begin());
y=*S[u].begin(); S[u].erase(S[u].begin());
S[x].erase(u); S[y].erase(u);
S[x].insert(y); S[y].insert(x);
if(S[x].size()==) q.push(x);
if(S[y].size()==) q.push(y);
}
int cnt=,ok=;
rep(i,,N) {
if(S[i].size()==) cnt++;
if(S[i].size()>) ok=;
}
if(ok&&cnt==) puts("Yes");
else puts("No");
return ;
}

F .Fake Plastic Trees

题意:让你建造一棵树,使得它有N个叶子节点,而且需要满足对于每个节点,它的左子树大小等于右子树大小,或者左子树大小比右边大1。

每次你构造一棵树,你可以选择之前构造过的树作为它的儿子。  现在让你构造不超过125棵树,满足上诉条件。

输出的方式是,输出V,表示构造的树的多少。 接下来V上,每行表示左子树的标号和右子树的编号。 最后输出根节点的标号。

(读了好久才懂了题意,主要是输出这里,我们构造的东西每次都是重复利用了之前的子树的。

思路:每次除2构造即可。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int x[maxn],y[maxn],tot; map<ll,int>mp;
void get(ll num)
{
if(mp.find(num)!=mp.end()) return ;
if(num==1LL) {
x[++tot]=-; y[tot]=-; mp[num]=tot;
return ;
}
ll mid=num/;
get(num-mid); get(mid);
tot++; x[tot]=mp[num-mid]; y[tot]=mp[mid];
mp[num]=tot;
}
int main()
{
int T; ll N;
scanf("%d",&T);
while(T--){
scanf("%lld",&N);
tot=-; mp.clear(); get(N);
printf("%d\n",tot+);
rep(i,,tot) printf("%d %d\n",x[i],y[i]);
printf("%d\n",tot);
}
return ;
}

H .Fractions

题意:求多少对(x,y),满足A<=x<=B ; C<=y<=D,而且(x+y)/gcd(x,y)<1000;

思路:水题,我们枚举化简后的x'=x/gcd; y'=y/gcd;然后看有多少gcd可以在给定区间即可。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int main()
{
ll A,B,C,D,ans=;
scanf("%lld%lld%lld%lld",&A,&B,&C,&D);
rep(i,,)
rep(j,,-i){
if((__gcd(i,j))==){
//A<=ix<=B c<=jx<=D
ll tmp=min(D/j,B/i)-max((A-)/i,(C-)/j);
if(tmp>) ans+=tmp;
}
}
printf("%lld\n",ans);
return ;
}

I .Game on Plane

题意:给定N个点,围成一个圈,每次玩家选择两个点连线,不得与之前连的线相交。 如果玩家连线形成了一个多边形或者没有选的点,输。

思路:sg函数,每次连线会把大圈分为两个小圈,跑sg即可。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int sg[maxn],vis[maxn];
void init()
{
sg[]=; sg[]=;
rep(i,,){
rep(j,,i-){
vis[sg[j]^sg[i--j]]=i;
}
rep(j,,) {
if(vis[j]!=i) { sg[i]=j; break;}
}
}
}
int main()
{
init();
int T,N; scanf("%d",&T);
while(T--){
scanf("%d",&N);
if(!sg[N]) puts("Second");
else puts("First");
}
return ;
}

L .Timsort

题意:给定长度为N的数组a[],Q次询问,每次给出长度L,让你按照规定跑。 每次从当前位置出发,一直跑不降序列,或者下降序列。跑完后,如果大于等于L,从下一个位置继续开始,否则要凑齐长度L,同时累计凑数的个数。

思路:预处理,每次按照规定跑即可,因为我们可以记忆化,所以我们可以假设每次的问题是不一样的,最坏的情况下是N/1+N/2+N/3...+N/N~=NlogN,所以就ok了,想不到这一点,这个水题就跑掉了。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rep2(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int maxn=;
int a[maxn],R[maxn][],ans[maxn][];
int main()
{
int N,Q,x;
scanf("%d",&N);
rep(i,,N) scanf("%d",&a[i]);
rep2(i,N,) {
R[i][]=R[i][]=;
if(i+<=N&&a[i]<=a[i+]) R[i][]=R[i+][]+;
if(i+<=N&&a[i]>a[i+]) R[i][]=R[i+][]+;
}
scanf("%d",&Q);
while(Q--){
scanf("%d",&x);
if(ans[x][]) printf("%d %d\n",ans[x][],ans[x][]);
else {
int A=,B=;
rep(i,,N){
A++; if(i==N) break;
int t=R[i][a[i]>a[i+]];
if(t<x){
if(i+x-<=N) B+=x-t;
else B+=N-(i+t-);
i=i+x-;
}
else i=i+t-;
}
ans[x][]=A; ans[x][]=B;
printf("%d %d\n",A,B);
}
}
return ;
}

Gym.102059: 2018-2019 XIX Open Cup, Grand Prix of Korea(寒假gym自训第一场)的更多相关文章

  1. 【GYM 102059】2018-2019 XIX Open Cup, Grand Prix of Korea

    vp了一场gym,我又开心地划水了. A. Coloring Roads 题意:给定一棵树,树边一开始都是无色的,每次操作可以把一个点到根的路径染成某个颜色,每次询问当前树上出现过某个次数的颜色种数. ...

  2. 2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2) GYM 102058 F SG函数

    http://codeforces.com/gym/102058/problem/F 题意:平面上n个点  两个人轮流在任意两个点之间连一条线但是不能和已有的线相交,先围成一个凸多边形的获胜,先手赢还 ...

  3. Gym - 102059D 2018-2019 XIX Open Cup, Grand Prix of Korea D. Dumae 贪心+堆

    题面 题意:有3e5个人排成一列,然后Li,Ri表示每个人可以站在[Li,Ri]中的一个,然后M(1e6)个限制条件,某个人一定要在某个人前面,求一种合法方案,无解输出-1 题解:首先可以想到对于限制 ...

  4. Codeforces gym102058 J. Rising Sun-简单的计算几何+二分 (2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2))

    J. Rising Sun time limit per test 1.0 s memory limit per test 1024 MB input standard input output st ...

  5. 2018-2019 XIX Open Cup, Grand Prix of Korea B - Dev, Please Add This!

    B - Dev, Please Add This! 思路: 对于每一个经过 '*' 的横线和竖线看成一个整体,设他们分别为分量x和分量y 用2-sat考虑这个问题, 如果要经过 '*' ,那么x和y至 ...

  6. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Korea

    A. Donut 扫描线+线段树. #include<cstdio> #include<algorithm> using namespace std; typedef long ...

  7. 【推导】【数学期望】【冒泡排序】Petrozavodsk Winter Training Camp 2018 Day 5: Grand Prix of Korea, Sunday, February 4, 2018 Problem C. Earthquake

    题意:两地之间有n条不相交路径,第i条路径由a[i]座桥组成,每座桥有一个损坏概率,让你确定一个对所有桥的检测顺序,使得检测所需的总期望次数最小. 首先,显然检测的时候,是一条路径一条路径地检测,跳跃 ...

  8. 【线段树】【扫描线】Petrozavodsk Winter Training Camp 2018 Day 5: Grand Prix of Korea, Sunday, February 4, 2018 Problem A. Donut

    题意:平面上n个点,每个点带有一个或正或负的权值,让你在平面上放一个内边长为2l,外边长为2r的正方形框,问你最大能圈出来的权值和是多少? 容易推出,能框到每个点的 框中心 的范围也是一个以该点为中心 ...

  9. 2020-2021 Winter Petrozavodsk Camp, Belarusian SU Contest (XXI Open Cup, Grand Prix of Belarus) 题解

    题目列表 C. Brave Seekers of Unicorns D. Bank Security Unification G. Biological Software Utilities I. B ...

随机推荐

  1. ScheduledThreadPoolExecutor

    java提供了方便的定时器功能,代码示例: public class ScheduledThreadPool_Test { static class Command implements Runnab ...

  2. laravel注册行为的方法和逻辑

    public function register() { //验证: $this->validate(\request(), [ 'name' => 'required|min:3|uni ...

  3. Java 算法 概念汇总

    编程面试的10大算法概念汇总   以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java ...

  4. 使用STL的next_permutation函数

    文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. 下午研究了一下全排列算法,然后发现C++的STL有一个函数可以方便地生成全排列,这 ...

  5. 关于js的对象原型继承(二)

    本章讨论使用new一个构造函数来创建一个对象. 前期知识点说明: 1.prototype是函数的一个属性,每个函数都有一个prototype属性.这个属性是一个指针,指向一个对象.它是显示修改对象的原 ...

  6. VBA续嘘嘘——宏技巧集绵

    什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...

  7. navicat premium 连接出现的问题

    1.listener does not currently know of service requested in connect descriptor 2.问题截图: 3.问题原因:服务名或者SI ...

  8. day 55 前端

    前端JQuery 语法 1 关于表格基数偶数背景颜色变换的 2 关于has后代   和not非 3 jQuery 和dom的转换  dom 转换成jQuery 用$(包起来) 不加引号 4  关于 n ...

  9. 关于索引的相关 day45

    mysql数据库索引相关   一 介绍 什么是索引? 索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能 ...

  10. C++面试常见考点

    这两周参加了3家公司的面试,一家是做嵌入式的外企,一家是做智能家居的初创公司,一家是做网络分析的公司. 通过参加面试,越发的觉得语言只是基础,虽然都是计算机领域,但是不同的业务肯能用到的技术不同,所以 ...