Problem A 宇宙魔方

   有一个$N \times N \times N$的魔方,每一次操作可以整体转动该魔方,也可以对于一层整体+X。

   给出最后魔方的最终状态,其中有一个位置为-1。利用其它位置的信息输出这个-1具体表示的值。

   对于$100\%$的数据满足$1 \leq n\leq 100$

Self-correction:

  考场看错题,最后炸题,导致期望得分为0。

  不能把问题看的太简单,该思考的时候还是得多思考。

Solution1:

  标程给的解答是,将x层y行z列的点染色成$(x+y+z)\% n$,

  此时容易证明,同一个层上每行每列都是一个$[0,n-1]$的轮换。

  若将魔方转置,容易看出,同行,每列,每层都是一个$[0,n-1]$的轮换; 同列,每行,每层都是一个$[0,n-1]$的轮换。

  这样一来,如果我们对于一次+X的操作,虽然不同位置的值会发生改变,但是同一颜色的点的和仍然保持不变。

  最后,由于-1只占一个颜色,我们计算其他任意一种颜色位置上的权值和,直接减去-1那种颜色的权值和就是答案。

  时间复杂度为$O(n^3)$

Solution2 :

  一种比较美妙的做法是,可以将同一层上的+x,转化为若干次同一列或者同一行的操作。 (转置同理)

  这样,如果我们对于$(x,y,z)$是$-1$的位置,只需要利用容斥原理,利用同层、同列、同行构造的矩形就可以求解了。

  每个位置,同层、同列、同行,必然能构造出一个宽度为$1$的正方形,所以这样构造可以通过所有测试点。

  时间复杂度为$O(n^3)$

Code : 这个题目方法比较多我就不贴了....

Problem B 战争

  有$n$个点的图,点的标号为$[0,n-1]$,有$m$条边,求出图上严格单增最长路的长度。

  对于$100\%$的数据满足$1 \leq n,m\leq 5\times 10^4$ 

Self-correction:

  考场需要仔细,虽然这个题,看成了[1,n]还有$96$的好成绩。

  但是不排除毒瘤出题人,给你卡到0分。还是要多加注意....

Solution :

  考虑$f[i]$表示到第$i$点的最长连读单增最长路长度。

  那么按照边权排序之后,直接$dp$就没有后效性了。

  注意到,由于是严格单增,那么需要相同边权所连的点同时转移。

  复杂度是$O(n+m)$

# include <bits/stdc++.h>
using namespace std;
const int N=1e5+;
int n,m,tot;
int t[N],f[N];
struct Edge { int u,v,w;}e[N];
bool cmp(Edge a,Edge b) { return a.w < b.w;}
int main() {
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++) {
int u,v,w; scanf("%d%d%d",&u,&v,&w);
e[++tot].u=u; e[tot].v=v; e[tot].w=w;
}
sort(e+,e++m,cmp);
int last = ;
for (int i=;i<=m;i++) if (i==m || e[i].w < e[i+].w) {
for (int j=last+;j<=i;j++) t[e[j].u]=f[e[j].u],t[e[j].v]=f[e[j].v];
for (int j=last+;j<=i;j++) {
f[e[j].u]=max(f[e[j].u],t[e[j].v]+);
f[e[j].v]=max(f[e[j].v],t[e[j].u]+);
}
last = i;
}
int ans = ;
for (int i=;i<n;i++) ans=max(ans,f[i]);
printf("%d\n",ans);
return ;
}

war.cpp

Problem C 和平

  考虑$n$个点的树,每条边有边权,处理$q$个询问。

  从$u$走到$v$的最短路径,如果不经过边权小于$w$的边,最远能走到那个节点。

  对于$100\%$的数据,满足$1 \leq n ,q \leq 10^5$

Solution :

  全场最可做题,二分+倍增的暴力人人都会。

  复杂度为$O(n {log_2}^2 n)$

Code :

# pragma GCC optimize()
# include<bits/stdc++.h>
# define inf (2e9)
using namespace std;
const int N=2e5+;
struct rec{ int pre,to,w; }a[N];
int n,m,tot;
int head[N],g[N][],d[N][],dep[N];
void adde(int u,int v,int w) {
a[++tot].pre=head[u];
a[tot].to=v;
a[tot].w=w;
head[u]=tot;
}
void dfs(int u,int fa) {
g[u][]=fa; dep[u]=dep[fa]+;
for (int i=head[u];i;i=a[i].pre) {
int v=a[i].to; if (v==fa) continue;
d[v][]=a[i].w; dfs(v,u);
}
}
int lca(int u,int v) {
if (dep[u]<dep[v]) swap(u,v);
for (int i=;i>=;i--)
if (dep[g[u][i]]>=dep[v]) u=g[u][i];
if (u==v) return u;
for (int i=;i>=;i--)
if (g[u][i]!=g[v][i]) u=g[u][i],v=g[v][i];
return g[u][];
}
int dist(int u,int v) {
int ret=inf;
if (dep[u]<dep[v]) swap(u,v);
for (int i=;i>=;i--)
if (dep[g[u][i]]>=dep[v]) ret=min(ret,d[u][i]),u=g[u][i];
if (u==v) return ret;
for (int i=;i>=;i--)
if (g[u][i]!=g[v][i]) {
ret=min(ret,d[u][i]);
ret=min(ret,d[v][i]);
u=g[u][i],v=g[v][i];
}
return ret;
}
int Get(int u,int d) {
for (int i=;i>=;i--) if (d>=(<<i)) {
u=g[u][i]; d-=(<<i);
}
return u;
}
int work1(int u,int v,int w) {
int l=,r=dep[v]-dep[u],ans;
while (l<=r) {
int mid = (l+r)>>;
int to = Get(v,mid);
if (dist(to,u)>=w) ans=mid,r=mid-;
else l=mid+;
}
return Get(v,ans);
}
int work2(int u,int v,int w) {
int l=,r=dep[u]-dep[v],ans;
while (l<=r) {
int mid = (l+r)>>;
int to = Get(u,mid);
if (dist(to,u)>=w) ans=mid,l=mid+;
else r=mid-;
}
return Get(u,ans);
}
int work3(int u,int v,int w,int l) {
int ret1=work2(u,l,w); if (ret1!=l) return ret1;
int ret2=work1(l,v,w); return ret2;
}
int main() {
// freopen("peace.in","r",stdin);
// freopen("peace.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) {
int u,v,w; scanf("%d%d%d",&u,&v,&w);
adde(u,v,w); adde(v,u,w);
}
memset(d,0x3f,sizeof(d));
dfs(,);
for (int i=;i<=;i++)
for (int j=;j<=n;j++) {
g[j][i]=g[g[j][i-]][i-];
d[j][i]=min(d[j][i-],d[g[j][i-]][i-]);
}
while (m--) {
int u,v,w; scanf("%d%d%d",&u,&v,&w);
int l = lca(u,v);
if (l == u) printf("%d\n",work1(u,v,w));
else if (l == v) printf("%d\n",work2(u,v,w));
else printf("%d\n",work3(u,v,w,l));
}
return ;
}

peace.cpp

  

HGOI20191114 CSP模拟赛 反思的更多相关文章

  1. 『2019/4/9 TGDay2模拟赛 反思与总结』

    2019/4/9 TGDay2模拟赛 今天是\(TG\)模拟赛的第二天了,试题难度也是相应地增加了一些,老师也说过,这就是提高组的难度了.刚开始学难的内容,一道正解也没想出来,不过基本的思路也都是对了 ...

  2. 『2019/4/8 TGDay1模拟赛 反思与总结』

    2019/4/8 TGDay1模拟赛 这次是和高一的学长学姐们一起参加的\(TG\)模拟考,虽然说是\(Day1\),但是难度还是很大的,感觉比\(18\)年的\(Day1\)难多了. 还是看一下试题 ...

  3. CSP模拟赛游记

    时间:2019.10.5 考试时间:100分钟(连正式考试时间的一半还没有到)题目:由于某些原因不能公开. 由于第一次接触NOIinux系统所以连怎么建文件夹,调字体,如何编译都不知道,考试的前半小时 ...

  4. 【CSP模拟赛】Freda的迷宫(桥)

    题目描述 Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫.每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过.  黄昏 ...

  5. CSP模拟赛2游记

    这次由于有课迟到30min,了所以只考了70min. 调linux配置调了5min,只剩下65min了. T1:有点像标题统计,但要比他坑一点,而且我就被坑了,写了一个for(int i=1;i< ...

  6. 2020.11.30【NOIP提高A组】模拟赛反思

    90,rk42 T1 考试的时候觉得可以贪心,就每次找到最大的,然后以它为根去遍历每个子树,求出其最大值,然后删去这个点.一直持续直到边删完,时间复杂度\(O(n^2)\),然后想了想链的情况,没有打 ...

  7. 【CSP模拟赛】Freda的旗帜

    题目描述  要开运动会了,Freda承担起了制作全校旗帜的工作.旗帜的制作方法是这样的:Freda一共有C种颜色的布条,每种布条都有无数个,你可以认为这些布条的长.宽.厚都相等,只有颜色可能不同.每个 ...

  8. 【csp模拟赛4】基站建设 (station.cpp)

    [题目描述] 小 Z 的爸爸是一位通信工程师,他所在的通信公司最近接到了一个新的通 信工程建设任务,他们需要在 C 城建设一批新的基站. C 城的城市规划做得非常好,整个城市被规整地划分为 8 行 8 ...

  9. 【CSP模拟赛】starway(玄学建边 最小生成树)

    问題描述 小w伤心的走上了 Star way to heaven.   到天堂的道路是一个笛卡尔坐标系上一个n×m的长方形通道(顶点在(0,0))和(n,m)),小w从最左边任意一点进入,从右边任意一 ...

随机推荐

  1. 【Python基础】11_Python中的字符串

    1.字符串的定义 可以使用""双引号,也可以使用''单引号定义字符串,一般使用双引号定义. 2.字符串的操作 判断类型: 查找和替换 大小写切换: 文本对齐 注:string.ce ...

  2. 适合新手的160个creakme(一)

    先跑一下 直接使用这个字符串去check,发现提示信息有关键字符串 CODE:0042FB80 00000021 C Sorry , The serial is incorect ! 找到这个字符串的 ...

  3. 【组成原理】BYTE ME!

    题目描述 Parity is an important concept in data transmission.  Because the process is not error proof, p ...

  4. 【转】STM32的FSMC详解

    STM32的FSMC真是一个万能的总线控制器,不仅可以控制SRAM,NOR FLASH,NAND FLASH,PC Card,还能控制LCD,TFT. 一般越是复杂的东西,理解起来就很困难,但是使用上 ...

  5. Python 运算符与数据类型

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  6. VNote: 一个舒适的Markdown笔记软件

    Update: 支持macOSYunpan Update 2: 写在VNote半周岁 QQ群(487756074) Markdown标记语言一直是许多程序员的最爱.目前,有许多优秀的Markdown编 ...

  7. volatile 关键字(修饰变量)

    目录 volatile 关键字(修饰变量) 1. 含义 2. 作用 3. 如何保证可见性 4. 如何禁止指令重排序优化 5. volatile 是不安全的 6. volatile 不适用场景 vola ...

  8. Get HttpWebResponse and HttpClient Return String by proxy

    #region Get HttpClient Return String /// <summary> /// Get HttpClient Return String /// </s ...

  9. JavaWeb-用过滤器修改请求的返回状态码

    问题: 客户SDK对接服务,默认只识别200和非200的请求状态码.需要修改当前应用的状态码(如将201转为200) 解决方案:通过扩展HttpServletResponseWrapper,获取到每个 ...

  10. 如何用Visual Studio Code远程调试运行在服务器上的nodejs应用

    假设我有一个nodejs应用,运行在AWS - 亚马逊云平台上(Amazone Web Service).我想用本地的Visual Studio Code来远程调试服务器端的nodejs应用. Vis ...