07 2024 档案
摘要:B 显然不能走回头路,如果具体考虑各种情况会很麻烦。 比如箱子在的地方是不是割点,人能不能绕过箱子去到箱子附近..额,总之很麻烦,需要一个通解 那就考虑人先 不经过箱子 走到箱子的邻点的最短距离,可以用一遍bfs解决。 然后再考虑从1号点的某个邻点开始,人拉着箱子怎么走。 可以把人-箱子看成一条有向
阅读全文
摘要:好吧标题党了一回,但我相信有不少人被出题人的那句“手玩一下就知道了”无语住了 像我这种憨憨一旦想偏了就救不回来了,于是困惑了好久,在雨巨的指导下彻底搞懂 (此处大声谢谢雨巨,又有实力又会讲题又认真答疑每一个问题,呜呜呜我永远的姐) 题意简单来说就是定义f(i)为树上i点到其他所有点的距离之和,给定x
阅读全文
摘要:1477A - Nezzar and Board 观察到2x-y可以拆成x+(x-y),现在模拟一下这个过程 发现得到的数可以看成从某个点xj出发,加上若干个两数之间的差的形式。 再考虑一下2x-y的几何意义,发现相当于在数轴上做x关于y的对称点,并且和数的分布位置有关,和具体数值是无关的 接下来有
阅读全文
摘要:打了个爽!今天打得很稳,基本没有罚时,相当优雅的一场 1002 旅行 线段树合并经典题,顺便在过程中做个dp #include<bits/stdc++.h> using namespace std; const int N = 2e5+5; #define mid ((l+r)>>1) typede
阅读全文
摘要:磨合上升期,爽! B 队友做的 #include<bits/stdc++.h> using namespace std; #define int long long inline int read() { int x=0;bool f=1;char ch=getchar(); for(;ch<'0'
阅读全文
摘要:A #include<bits/stdc++.h> using namespace std; int a[200]; void solve(){ int n,k;cin>>n>>k; a[1]=n; for(int j=n-1,i=2;i<=1+(n-1)*2;i+=2,j--){ a[i]=a[i
阅读全文
摘要:B MST 类似根号分治的思路,点数少的跑Prim,点数大的跑Kruscal 有个坑点是分界点调100过不了,90能卡过去 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5+5;
阅读全文
摘要:1003 树 正解是开权值线段树暴力合并 那线段树合并的思想是什么?线段树合并就是线段树_合并啊!(bushi) 想象有两棵线段树,合并时就是对应的节点信息融合 比如现在区间[1,5],用num[rt]表示rt管辖的区间里数的个数 树a的num[rt]=3,树b的num[rt]=4,合并就是加起来=
阅读全文
摘要:A.给定n*m的矩阵a,构造一个同样大小的矩阵b使得[1,n*m]都出现一次,且b和a在任意位置上都不相等。 特判完无解后循环移位即可。 #include<bits/stdc++.h> using namespace std; int a[12][12]; void solve(){ int n,m
阅读全文
摘要:A 简单的组合数学。考虑枚举为1的个数的长度为x,则其他数除了最后一位的0外都可以乱填。 对于末尾为1的数,显然每一位都是独立的,单独考虑每一位。 显然只要该位上有一个0即可,经典容斥:减去全为1的这一种情况。 #include<bits/stdc++.h> using namespace std;
阅读全文