![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CF
悭吝韶华
在学习Unity和图形学.
展开
-
G. Columns Swaps(2-SAT)
传送门 首先判断每个数是否都恰好出现了两次。如果满足上述条件,那么肯定可以经过有限次交换变成两行排列。 根据2-SAT的思想进行建边。 然后每次dfs(dfs过程中不会碰到同一个数)的时候判断当前点的行位置,记录dfs过程中出现在第一行和第二行中的元素个数(它们满足都在不同列),取计数较小的那个行中的列位置进行交换即可。 #include<bits/stdc++.h> using namespace std; #define ll long long const int MAXN=400005;原创 2020-08-02 13:52:15 · 204 阅读 · 0 评论 -
Codeforces Round #629 (Div. 3)E. Tree Queries(树)
题意就是m次询问,问你每次询问的k个点能否都在从根节点到一个点的路径距离1或者就在路径上。 我们发现对于一个节点,如果存在两个以上孙子节点,显然输出NO,那怎么判断何时输出YES呢?显然只要不存在这样两个孙子结点即可,也就是说对于任意节点只可能有多个儿子节点就输出YES,那么判断所有节点的父节点是不是都在一条路径上即可。因为路径可能很长,要用倍增法预处理求出每个点的祖先节点。 #include<bits/stdc++.h> using namespace std; int n,m; #defin原创 2020-07-08 00:30:32 · 122 阅读 · 0 评论 -
Aladdin and the Flying Carpet(算数基本定理+埃式筛法)
这里用到了质因数分解求因子个数。 预处理用埃式筛法打了个素数表。 对于小于b的因子暴力跑,没想到别的方法。 #include<bits/stdc++.h> using namespace std; int n,m; #define MAXN 1005000 #define ll long long ll a[MAXN]; ll p[MAXN]; int check[MAXN]; int pcnt=0; void isprime() { for(ll i=2;i<=1000000;i原创 2020-07-06 22:25:26 · 126 阅读 · 0 评论 -
Educational Codeforces Round 90 (Rated for Div. 2)E. Sum of Digits(数论+思维)
#include<bits/stdc++.h> using namespace std; #define ll long long #define MAXN 2000005 #define rep(n) for(int i=1;i<=n;i++) #define rall(x) for(int i=(x).size()-1;i>=0;i--) #define all(x) for(int i=0;i<(x).size();i++) int a[MAXN]; int b[MAXN原创 2020-06-26 17:15:12 · 200 阅读 · 0 评论 -
Educational Codeforces Round 90 (Rated for Div. 2)F. Network Coverage(二分+思维+贪心)
#include<bits/stdc++.h> using namespace std; #define ll long long #define MAXN 2000005 #define rep(n) for(int i=1;i<=n;i++) #define rall(x) for(int i=(x).size()-1;i>=0;i--) #define all(x) for(int i=0;i<(x).size();i++) int a[MAXN]; int b[MAXN原创 2020-06-26 17:13:49 · 180 阅读 · 0 评论 -
Educational Codeforces Round 90 (Rated for Div. 2)G. Pawns(线段树+思维)
先占坑 #include<bits/stdc++.h> using namespace std; #define ll long long #define MAXN 400005 #define rep(n) for(int i=1;i<=n;i++) #define rall(x) for(int i=(x).size()-1;i>=0;i--) #define all(x) for(int i=0;i<(x).size();i++) int n,k,m; #define l原创 2020-06-26 17:12:23 · 160 阅读 · 0 评论 -
Codeforces Round #647 (Div. 2) - Thanks, Algo Muse!E. Johnny and Grandmaster详细题解(思维+贪心)
将k从小到大排序,因为k越大对结果的影响越大,我们从大的k开始考虑。 我设置了flag变量来记录到当前时,需要多少个pa[i]p^{a[i]}pa[i]才能让答案即差值为0. 显然贪心的策略是,不断去缩小这个差值。 当flag==0flag==0flag==0只能把答案加上当前pa[i]p^{a[i]}pa[i]. 如果flag!=0flag!=0flag!=0显然要减去当前的值让答案减小。 但是如果存在两个相邻的k差值很大,那么这个需要的数量就会超出ll的范围。 我们要怎么规避呢? 注意到有一个特殊情况,原创 2020-06-05 11:44:57 · 149 阅读 · 0 评论