- 博客(73)
- 收藏
- 关注
原创 Codeforces Round #507 (Div. 1) B. Subway Pursuit 交互题
脑洞交互题 给出范围 系统会返回 yes no 来表示列车是不是在该范围内二分范围 然后范围差不多了 猜一下范围里面的一个点 然后继续二分范围 直到猜对 注意可以用cout<<endl清理缓存区#include<bits/stdc++.h>using namespace std;typedef long long ll;int main(){ s...
2018-09-23 18:49:13 433 2
原创 Codeforces Round #507 (Div. 1)C. Network Safety
题意:给个n个点 m条边的图 每个点有个权值c 范围(0,2^k-1) 如果边的两个定点的权值不同 那么他们的连接就是安全的 现在有一个病毒 他的值x 在上述范围内随机 存在一个集合 <set<int>,int>前面 是点集 后面病毒值x 如果 x感染了 前面的点集的所有点后 (攻击就是 c=c^x)原来的连接仍然是安全的 就是合法的 让你求有多少个合...
2018-09-23 18:43:40 338
原创 Help Tomisu UVA - 11440 gcd+欧拉 加证明
紫书的思路 其中有个证明是看的 https://blog.csdn.net/a197p/article/details/45649019 的博客引用自 https://blog.csdn.net/a197p/article/details/45649019 那么先看一个证明:求kn中与n互质的个数,答案为kϕ(n)。ϕ(n)表示1-n中与n互质的个数,那么由此考虑[n + 1, 2n]...
2018-09-12 20:35:55 246
原创 Joseph's Problem UVA - 1363
紫书写的很清楚被除数固定,除数逐次加1,直观上余数也应该有规律。 假设k/i的整数部分等于p,则kmod i = k-i*p。 因为k/(i+1)和k/i差别不大,如果k/(i+1)的整数部分也等于p,则k mod (i+1) = k-(i+1)*p = k-i*p - p = k mod i - p。 换句话说,如果对于某一个区间i, i+1, i+2,…, j,k除以它们的商的整数部...
2018-09-12 17:58:15 220
原创 Double Patience UVA - 1637 dp+概率
注意 一个是等概率选择 则 d[i]为后继状态的成功概率的平均值 意思是 如果取了 牌堆 1 2的牌后 剩下的选择只有 取1 3 后才能成功 则取 1 2成功的概率 为 取 1 3的方案 即 1 除以总方案数#include<bits/stdc++.h>using namespace std;char card[9][4][3];map<vector&l...
2018-09-08 15:33:56 193
原创 筛法求Phi
void phi_table(int n){for(int i=2;i<=n;i++)phi[i]=0;//先初始化所有为0phi[1]=1;//小于等于1且与1互质的数 初始化为1for(int i=2;i<=n;i++)if(!phi[i])//如果这个数没有被改变过 说明这个数 i为素数 for(int j=i;j<=n;j+=i){ if(!phi[j])...
2018-09-08 13:30:00 370
原创 Irrelevant Elements UVA - 1635 二项式定理+唯一分解定理
n个数 一层一层往下加就会形成类似杨辉三角形的形状 到了最后一行 系数呈现二项式定理分布 从 C(n-1,0)到C(n-1,n-1) 又因为m至少为2 所有C(n-1,0) C(n-1,n-1)可以不用算 又因为公式C(n,k)=(n-k+1)/kC(n,k-1)可用用递推关系算 只要在前一个的基础上乘以那个递推系数 #include<bits/stdc++.h>u...
2018-09-08 11:59:17 309
原创 Minimum Sum LCM UVA - 10791 gcd+lcm+唯一分解定理
这里的题目意思是 2个或2个以上的数组成的最大共因数是n并且使得这几个数的和最小 例如有两数 a b 不互质 即 gcd(a,b)!=1假设他们的最小公倍数 lcm(a,b)=n 即 a/gcd(a,b)*b 而a/gcd(a,b) 和n的最小公倍数也为n 反而和更小了 所以 应该取互质的数这里就要用到唯一分解定理了 其中有一些细节处理见代码#include<...
2018-09-07 21:24:26 223
原创 牛客练习赛25 最长区间
其中表示left_len right_len可以用一个Len[i] 表示 len[i]表示包括i的在i之前的最长递增序列 用Len数组可以很方便得记录到从x往左的left_len等于多少 然后向由可以推出right_lencnt[i ]计算每一个长度i的序列有多少个 其中 一个i的子长度的序列也会记录更新a[x]后 只会改变x左右的值 例如 如果ax比ax-1要小了 则len[x]=1;...
2018-09-06 22:33:51 207
原创 牛客练习赛25 因数个数和
https://blog.csdn.net/u011787439/article/details/82183783 大佬的博客写的很清楚 求1-n的因子个数和 就是从1-n中qu的数任意取一个数i 在1-n之间有多少是i的倍数 即[n/i] 因为n/i的结果也是 n的因数 所以可以只算 1-sqrt(n) 然后乘 2 , 因为n/i可以等于i,乘2重复计算了,还要减去这些重复计算的数 只...
2018-09-06 20:30:41 259
原创 Choose and divide UVA - 10375 唯一分解定理+Eratosthenes筛法
Eratosthenes筛法筛一遍素数 直接朴素判也能过 然后 写一个add_factorial算阶乘 add_integer用来唯一分解定理#include<bits/stdc++.h>using namespace std;bool is_prime[100000+5];vector<int>prime;int e[100000+5];void in...
2018-09-04 20:25:51 153
原创 Disgruntled Judge UVA - 12169 拓展欧几里得 +暴力
参考了 https://www.cnblogs.com/Przz/p/5409721.html 大佬的题解 他写的推导非常清晰 #include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod =10001;long long f[10005];void gcd(ll a,ll...
2018-09-04 17:02:32 174
原创 Bigger is Better UVA - 12105 dp
用两个数组 一个dp[i][j]表示用i根火柴 余数为j的数字最大位数 而p[i][j]记录一下这个位数中的最右边的那个数字是什么#include<cstdio>#include<cstring>using namespace std;const int maxn = 100 + 5;const int maxm = 3000 + 5;// dp[i]...
2018-09-02 21:18:04 166
原创 Fixing the Great Wall UVA - 1336 区间dp+前缀和+记忆化
紫书代码 dp中表示方向的p 因为机器人的有效位置肯定是i j两个点上 所以只要判断 是从左端点出发还是从右端点出发就能很快得计算出路程的时间 p=0时表示当前位于左边如果想要J+1 就要 j+1的标号x减去i的x 其他位置同理同时最后要加上 每个点时间为0的修理费用#include<bits/stdc++.h>using namespace std;const...
2018-09-02 20:24:55 175
原创 Dropping water balloons UVA - 10934 dp 有点难想
思路 dp[i][j]表示用i个球实验j次款所能测试的楼的最高层数 这个层数 不是从1开始的狭义的层数 是一个所能测的的层数的值 比如 在2 楼 如果所能测试的最高层数为5 则最高的所能测的层数位2+5=7如果气球破了 当前测试的楼层位k dp[i-1][j-1]+1 ==k 如果没破 当前测试的楼层位k dp[i][j]=k+dp[i][j-1]表示测试之后没破则 i个球测j...
2018-09-02 16:17:52 187
原创 Tango Tango Insurrection UVA - 10618 多转移dp 终点逆推
紫书的代码 多转移问题 从终点逆推 #include<cstdio>#include<cstring>#include<cassert>const int UP = 0;const int LEFT = 1;const int RIGHT = 2;const int DOWN = 3;const int maxn = 70 + 5;/...
2018-09-02 14:33:36 178
原创 Fund Management UVA - 1412 状压dp 状态的表示
太菜 看紫书代码看半天见注释 主要是状态难表达 转移倒是非常简单#include<cstdio>#include<cstring>#include<vector>#include<map>using namespace std;const double INF = 1e30;const int maxn = 8;const i...
2018-09-01 17:28:11 214
原创 Twenty Questions UVA - 1252 状压dp 子集生成
题意有点绕 等于说是求最优策略下 即排除方案最优的情况下 需要排除最多次的集合的排除次数 详见代码注释#include<bits/stdc++.h>const int maxn=13;char objects[300][200];int d[1<<maxn][1<<maxn],cnt[1<<maxn][1<<maxn],...
2018-09-01 15:31:01 180
原创 Headmaster's Headache UVA - 10817 dp集合构造
紫书dp 用位表示集合 其中位运算集合需要注意下#include<bits/stdc++.h>using namespace std ;int m,n,s;int d[150][1<<10][1<<10];int c[150];int st[150];string temp;const int INF=1<<20;int dp...
2018-08-31 22:14:12 197
原创 Perfect Service UVA - 1218 树形dp
紫书dp 主要是状态的确定 无根树转有根树 d(u,2)的状态转移很有意思 详见代码注释#include<bits/stdc++.h>using namespace std;int n;const int maxn=10000+5;const int INF=1<<20;vector<int>G[maxn],vertices;int p[ma...
2018-08-31 20:47:17 214 1
原创 Party at Hali-Bula UVA - 1220 树的最大独立集
紫书dp #include<bits/stdc++.h>using namespace std;int n;int cnt=0;int d[205][3],f[205][3];//d(u,0) f(u,0)标志以u为根的子树中不选u点所能得到的最大人数以及方案的唯一性 f(u,0)=k k==1唯一 0不唯一而d(u,1) f(u,1)则是取u点的最大人数 v...
2018-08-31 19:23:06 166
原创 POJ1651 dp 最优矩阵链乘
dp[i][j] i j代表矩阵的边 dp[i][j]等于乘法次数状态转移:dp[i][j]=min(dp[i][k]+dp[k][j]+p[i]*p[k]*p[j])#include<cstdio>#include<iostream>#include<cstring>using namespace std;int a[105];in...
2018-08-28 21:32:18 190
原创 Color Length UVA - 1625 dp
紫书上的代码 其中运用了滚动数组 (i-1,j) (0,j) (i,j-1) (1,j-1) (i, j) (1,j-1) (i,j+1) (i+1,j-1) (i+1,j) 其中(i+1,j)要用上和左的数据 所以t 在每一行的循环结尾要 t^=1才能使用到上一行1的数据 #include<cs...
2018-08-28 20:45:34 144
原创 Planning The Expedition 暴力||二分
暴力题 枚举天数 数据量小直接枚举 大点可以二分 题意有点坑 type bj 是bj号的食物有一份 当时一直不知道 样例都过不去 也没想到暴力枚举 和贿赂投票那题枚举类似 但是更简单 #include<bits/stdc++.h> using namespace std; int a[105]; int m...
2018-08-15 11:41:36 187
原创 Codeforces Round #500 (Div. 2) [based on EJOI] Chemical table 图论 思维 求联通快
思路 当图形呈现1 1 1 1 0 0 1 0 0 1为有点 2为无点 时 就可以不同添加点了 1 0 0 0 1 0 1 0 0 这种情况时 1可以填入左或右 都能生成 另外 中间那个点对应的行或列 也就相当于 每个点的(x,y)看成x和y相连 (x1,y1)(x2,y2) ...
2018-08-14 17:18:58 200
原创 Photo of The Sky 数学
题意 给出2*n个 值 可以任意构成(x,y)的点 找出一种组合 使得一个矩形可以框住所有的点并且矩形最小可以简化成把2*n个值分成一个X集合和一个Y集合先把a数列排序分两种情况 1.数列的最大值和最小值在一个集合中 例如在X集合中 此时矩形的一条边为(xmax-xmin)已确知 即已经排序的数列的a[2*n-1]-a[0] Y的边的值应该由Y确定 因为要包含在矩形里 所以要选择连...
2018-08-14 16:07:05 325
原创 D. Vasya And The Matrix 数学 思维 位运算
推理过程如下a b c d e f g h i ⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇a b^e^h c^f^i d^e^f 0 0 g^h^i 0 0 其中 第一行 a^b^e^h^c^f^i ...
2018-08-13 18:22:08 286
转载 1016C - Vasya And The Mushrooms 前缀和模拟
看了作者:kimoyami: https://www.jianshu.com/p/6b226d8ee82f 翻译并注释CF上的题解 写的特别简单 码力++ 故转载了一下 #include<cstdio>#include<algorithm>using namespace std;long long sum123[2][300001],sum321[2][3...
2018-08-13 15:26:15 315
原创 B - Segment Occurrences substr操作
看到别人的代码 自己菜打了一堆 substr 解放双手 #include<iostream>#include<cstring>using namespace std;int a[1050];int main(){ int n,m,k,q,l,r,ans; memset(a,0,sizeof(a)); string s,t; ...
2018-08-13 00:07:49 211
原创 Codeforces Round #503 (by SIS, Div. 2) C Elections 暴力枚举贪心
贪心 打的时候思路对 但自己比较菜 码力不足 看了大神的代码#include<bits/stdc++.h>using namespace std;struct Node{int p,c;bool operator<(const Node&a)const {return c<a.c;}}node[3005];int x[3005];int ...
2018-08-12 19:39:50 503 1
原创 Codeforces Round #501 (Div. 3) Stars Drawing
题意 图中的*是否可以由 十字形的* 覆盖 (组成的十字架必须是从中心出发上下左右长度一样)十字架相互之间可以覆盖重叠 也就是两十字架可以公用边 这题简单和复杂两个版本都能暴力过去 就是遍历一遍数组 把每个十字架找出来然后标记一下 最后便利一下看有没有没有被标记到的*#include<bits/stdc++.h>using namespace std;c...
2018-08-12 17:54:31 215
原创 Walking Between Houses 贪心 码力
思路:码力测试 刚开始写菜得感人 看了大佬的代码发现写得特别简单 每次最少走一步s-k 剩余的步数如果大于n-2直接走最大的n-2 如果不足了就不用走了 因为前面已经减了每一步走的一格 #include <bits/stdc++.h>using namespace std;long long n, k, p = 1, ans[200005], temp;long...
2018-08-11 19:57:29 152
原创 牛客练习赛24 三轮 dp
5W的数据范围没想到背包能过 惊了dp[j+x]=dp[j]+dp[j+x]; x为物品体积 dp[x]为x体积下 的方案数 #include<bits/stdc++.h>using namespace std;int dp[100010];int main(){int n,m;cin>>n>>m;int x;dp[0]=1; ...
2018-08-11 13:08:25 150
原创 牛客练习赛24 凤凰 dfs
思路:因为和根节点相连的边每秒只能过一个 所以找到根的子节点中 子节点最多的那个根子节点 就是答案了#include<bits/stdc++.h>using namespace std;vector<int>G[1000010];int dfs(int x,int pre){int cnt=1;for(auto&v:G[x]){ if(v!=...
2018-08-11 13:05:50 267
原创 Change UVALive - 7503 思维
思路:枚举余下的钱 然后只要面值最大的钱用的多的组合可以凑成B 那所有情况都可以凑成 b 这里巧妙都用了递归 #include<bits/stdc++.h>using namespace std;int a,b;const double ex=0.0000001;int z[]={1,2,5,10,20,50,100,200,500,1000,2000,5000,...
2018-08-10 19:44:00 176
原创 CodeForces-651C 思维数学
思路:两边平方化简一下可以发现 x1==x2或者y1==y2时成立 算有多少个组合 就是算组合数 1+2+3......+n同时要减去相同的点的组合数 例如有2个(1,2) 3个(2,2)就要减去 (1 )+(2+1) 前者是(1,2)的重复数,后者是(2,2)的重复数 使用map可以很方便快捷地码完 其中cnt要用long long #include<bits/s...
2018-08-10 19:20:07 219
原创 Pagodas HDU - 5512 GCD 更相减损术
思路:a+b a-b所得出的为等差数列,其中等差数列的第一项 即为gcd(a,b) 因为该相减过程和 更相减损术类似 所以直接求出最大公约数 然后用N/gcd(a,b) - 2如果为奇数则先走的赢 如果为偶数则后走的赢 ...
2018-08-10 19:02:05 145
原创 MU Puzzle HDU - 4662 思维
题意中要注意的是使后面的字串加倍是使所有的字串加倍 英文有毒 所有U都是3各I组成的 所以加倍只能有2 4 6 8 16 ....1<<n的I又因为可以同时删去UU 即删去6个I 所以如果一个串可以被生成 则该串后面 转换成的I数要么是2的幂 要么是2得幂-6的倍数#include<bits/stdc++.h>using namespace std;c...
2018-08-09 00:29:28 191
原创 String Problem CodeForces - 33B最短路FLOYD
思路: 预处理最短路 然后每个不同字符选两个串变成变成相同字母的最短路径 如果有a->b b->c则可以a->c因为可以无限次数都换 #include<bits/stdc++.h>using namespace std;char s1[1000010];char s2[1000010];int hua[30][30];int main(...
2018-08-09 00:24:22 267
原创 Duizi and Shunzi HDU - 6188贪心
思路 贪心 优先选择对子 同时要考虑123345的情况 即如果当前牌为单数 则对子选择完之后剩一张 如果 下一个点树有奇数张牌 并且 下下一个点树有牌存在 则组成顺子出掉 为什么下一个为奇数下下个有牌就出掉的 因为 当前点数剩余的一张 如果不顺掉就废了 而下一个点数如果为偶数 直接对子掉不会消耗下下个点数的牌 当下一个点数为奇数时,如果下下张有牌就出掉的原因是 如果下下个点数的总数...
2018-08-09 00:20:53 231
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人