
codeforces
永远热血沸腾
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #444 (Div. 2) C. Solution for Cube【模拟】
学习一波网上简单的思路,直接判断旋转好的情况,一共六种情况。 判最后结果时至少需要四个面。/* ***********************************************Author :xiang578Email :i@xiang578.comCreated Time :Mon Nov 6 16:11:14 2017File Name原创 2017-11-06 16:36:58 · 312 阅读 · 0 评论 -
Codeforces Round #365 (Div. 2) C. Chris and Road 【数学】
如果按照题意思考,很难搞清楚情况。所以把问题转换一下,假设只有人在走,水平方向速度为v,竖直方向速度为u。根据物理知识,人在问题中的停止可以当场先在x轴上走一段距离,然后再同时朝上和朝右运动。又由于u和v已知,所以同时运动时的运动轨迹是确定的,而且是一条直线,假设这个斜率是a,又假设现在x轴上走了b米,那么运动方程是y=ax-ab。最后要求的就是一个最小的b满足y[i]>=a*x[i]-a*b,即所原创 2016-08-20 09:42:49 · 329 阅读 · 0 评论 -
Codeforces Round #364 (Div. 2) D. As Fast As Possible 【二分+贪心+验证】
贪心加二分验证,将n分成每组最多k个人的小组来考虑,问题中要求的就是最后一组什么时候到达,然后可以想到的一点是,汽车最好在所有的时间里面都在运行,所以我们枚举第一组坐车多少米,之后他们就是步行到终点,计算一下这样的时间,并且假设这个是答案,在去验证剩下的小组能不能在这个时间内达到终点。/* ***********************************************Author原创 2016-08-27 15:11:56 · 544 阅读 · 0 评论 -
Codeforces Round #364 (Div. 2) E. Connecting Universities【两次dfs】
两次dfs,从1开始搜索,son[x]记为以x为根的子树里有多少所大学,然后找到第一个son[x]>=m的做为下一次dfs的起点。第二次dfs以x为起点,计算到每一所大学的距离,然后在累加一下。/* ***********************************************Author :MaltubEmail :xiang578@foxmail原创 2016-08-27 15:08:09 · 479 阅读 · 0 评论 -
AIM Tech Round 3 (Div. 2) E. Connecting Universities 【构造】
00和11的个数可以推测出0和1的个数,设00为n个,0为m个,有n=(m-1)m/2。如果00和11的个数为0的话,如果有10和01的,那么0和1的个数为1。假设0为x个,1为y个,那么10和01的个数必要符合等于x y。最后构造答案,假设有一个x个0的字符串,那么我们去构造10的这种组合,只需要在字符串中插入1,然后统计一下这个1后面有几个0,如果刚好有符合题目个10组合,那么把1全部放在最后原创 2016-08-27 11:04:38 · 762 阅读 · 0 评论 -
Codeforces Round #361 (Div. 2)B. Mike and Shortcuts【BFS】
没有考虑到问题的本质,自己最初写的是最暴力的搜索,其实只是对左右两点和最短路上的点有关系。#include<bits/stdc++.h>using namespace std;const int N=200000+10;int n,a[N],use[N],ans[N];vector<int>g[N];int main(){ while(~scanf("%d",&n)) {原创 2016-07-08 09:52:34 · 238 阅读 · 0 评论 -
Codeforces Round #358D. Alyona and Strings【DP】
#include<bits/stdc++.h>using namespace std;char a[1024],b[1024];int dp[1024][1024][20],ans[1024][1024][20];int main(){ int n,m,p; scanf("%d%d%d",&n,&m,&p); scanf("%s",a+1); scanf("%原创 2016-07-06 13:56:22 · 288 阅读 · 0 评论 -
Codeforces Round #359 (Div. 2)D. Kay and Snowflake【树的重心】
求某个结点子树的重心情况1:重链上的儿子结点i为根的树结点数小于父结点j为根的树节点数,j为重心情况2:与1相反时,重心必在j到i为跟的树的重心的路径上/* ***********************************************Author :MaltubEmail :xiang578@foxmail.comBlog原创 2016-07-02 22:32:44 · 219 阅读 · 0 评论 -
Codeforces Round #359 (Div. 2)D. Kay and Snowflake【树的重心】
求某个结点子树的重心情况1:重链上的儿子结点i为根的树结点数小于父结点j为根的树节点数,j为重心情况2:与1相反时,重心必在j到i为跟的树的重心的路径上/* ***********************************************Author :MaltubEmail :xiang578@foxmail.comBlog原创 2016-07-02 22:27:50 · 285 阅读 · 0 评论 -
Codeforces Round #370 (Div. 2) C. Memory and De-Evolution【dfs+想法】
刚开始想从(x,x,x)进过一些方法得到(y,y,y),但是想了好多方法都不行。后来发现反过来想比较简单从(y,y,y)开始,按照三角形的要求得到下一个为(2*y-1,y,y),然后一直这样做下去。最后当三角形边最小的长度大于x时,就可以结束了。#include<bits/stdc++.h>using namespace std;int x,y,ans1,ans;void dfs(int a,原创 2016-09-12 16:10:35 · 280 阅读 · 0 评论 -
Codeforces Round #372 (Div. 2) C. Plus and Square Root【二分】
最简单的解法应该是第i次时,当前的值为i*(i-1),假设下一步时值为(i+1) * i,然后应该加 (i+1) * (i+1) * i-i-1次。自己的想法是假设当前为m,那么要能开方且复合题意的话,要得到的值最小应该为mi=(i+1) * k,其中要满足(mi * mi -now)%i==0,k可以通过二分来找到,还要注意一点计算过程中会超过long long 的范围,所以要避免4个数连乘,先求原创 2016-09-18 21:37:05 · 391 阅读 · 0 评论 -
Intel Code Challenge Final Round C. Ray Tracing【模拟】
#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll inf=1e15;const int N=1e6+10;struct date{ int x,y,to; ll t;} p[N];int n,m,k,d,x,y;map<pair<int,int>,int>mp;int ma原创 2016-10-11 08:14:34 · 342 阅读 · 0 评论 -
Codeforces Round #442 (Div. 2) E. Danil and a Part-time Job【线段树+dfs序】
对原来的图进行一波dfs,序列化,用线段树维护。查询就是线段树上区间查询,修改时可以用延迟标记一下。/* ***********************************************Author :xiang578Email :i@xiang578.comCreated Time :Mon Nov 6 14:30:42 2017File N原创 2017-11-06 15:42:16 · 356 阅读 · 0 评论 -
Codeforces Round #442 (Div. 2) C. Slava and tanks 【找规律】
分成三组 第一组是2 4 6 … 第二组是1 3 5 … 第三组是2 4 6 …#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <st原创 2017-11-06 13:46:36 · 296 阅读 · 0 评论 -
Codeforces Round #415 (Div. 2) C. Do you want a date? 【前缀和】
先把输入排个序,对于每个ai{a_i}和aj{a_j}来说,对最后的答案的贡献是 (aj−ai)∗2j−i−1{(a_j-a_i)*2^{j-i-1}} 。这样复杂度在 n2{n^2}。再化简一下式子,我们可以发现每个ai{a_i} 对于答案的贡献是 ai∗(fi−fn−i−1){a_i*(f_i-f_{n-i-1} )},其中fi=20+21+...2i{f_i=2^0+2^1+...2^i}。/原创 2017-11-06 13:28:52 · 287 阅读 · 0 评论 -
Codeforces Round #443 (Div. 2) C. Short Program 【模拟】
数字的范围为1-1023,所以用二进制表示需要10位。维护一个长度为10的数组a,分别代表每一位最后的值,取值一共有三种0,1和未知。 对于与操作,a数组对应位置上的数字置为0。对于或操作,a数组对应位置上的数字置为1。对于异或操作,如果a对应位置上的数字已经确定,则直接异或,否者另外用记录一下。最终答案由3种操作组成,或操作的数字是a数组中所有为1的位置表示的二进制数,与操作数是1023-a数组原创 2017-11-06 13:19:37 · 304 阅读 · 0 评论 -
Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins【规律】
题目比较难读懂,读懂之后就好写了,看一下第二组样例就可以找到规律。/* ***********************************************Author :xiang578Email :i@xiang578.comCreated Time :Wed Nov 8 15:53:46 2017File Name :cf876d.c原创 2017-11-08 18:45:31 · 290 阅读 · 0 评论 -
Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo [矩阵快速幂]
题目无聊到求多次快速幂…#pragma comment(linker, "/STACK:102400000,102400000")#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<vector>#include<map>#include<string>#include<iostrea原创 2017-07-08 21:33:48 · 326 阅读 · 0 评论 -
Codeforces Round #416 (Div. 2) C. Vladik and Memorable Trip 【线性DP】
对于每个数字 ai{a_i} 处理出最左的位置 Lai{L_{a_i}} 和最右的位置 Rai{R_{a_i}},然后 dpi{dp_i} 为前i个数字最大的值,对于每一个 Lai=i{L_{a_i}=i} 的位置计算出来i到MAX(Rai−Rai){i到MAX(R_{a_i-R{a_i}})} 的异或值,然后更新dp{dp},最后dpn{dp_n} 为最后的答案。#include<bits/std原创 2017-05-29 15:42:52 · 504 阅读 · 0 评论 -
Codeforces Round #416 (Div. 2) D. Vladik and Favorite Game【交互题+BFS】
首先要判断一下LR、DU有没有交换。一共有三种情况 1. 起点只能向下走 2. 起点只能向右走 3. 起点可以向下或者向右走之后用bfs找出一条路径,然后去输出就可以了。#include<bits/stdc++.h>using namespace std;const int N=6000;int dx[]= {0,0,-1,1};int dy[]= {1,-1,0,0};int n原创 2017-05-29 15:31:13 · 373 阅读 · 0 评论 -
Codeforces Round #356 (Div. 1)D. Bear and Tower of Cubes【pair使用】
#include <bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<n;i++)#define per(i,a,n) for(int i=n-1;i>=a;i--)#define pb push_backusing namespace std;typedef vector<int> VI;typedef long long ll;const原创 2016-06-13 20:06:28 · 323 阅读 · 0 评论 -
Codeforces Round #355 (Div. 2) D. Vanya and Treasure【分治+BFS】
大概就是分阶段转移,转移到下一阶段时要考虑一下这阶段点和下一阶段点的乘积,如果小于n*m直接暴力转移,否则的话,一这一阶段的点为起点进行bfs。/* ***********************************************Author :MaltubEmail :xiang578@foxmail.comBlog :htttp原创 2016-06-05 16:17:46 · 439 阅读 · 0 评论 -
IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) C. Bear and Up-Down【模拟】
/* ***********************************************Author :MaltubEmail :xiang578@foxmail.comBlog :htttp://www.xiang578.top************************************************ */#原创 2016-05-21 18:06:50 · 475 阅读 · 0 评论 -
Educational Codeforces Round 8 F. Bear and Fair Set【最大流】
刚开始超时的建图 1. 先有s和t,s和余数建边,流量是n/5。 2. 对于i从1到b,i和余数建边,流量是1,将i和不超过i的最大限制建边,流量是1。 3. 之后再将限制之间相互建边。 4. 毫无疑问这个是超时的,而且也是不正确的,题目中每个限制区间是严格取的看了题解以后 1. 我第一写的1到b的建边其实是没有太大意义的 2. 之后只需要将数轴分区间就好了,比如限制是[1,n1],原创 2016-04-16 11:07:01 · 458 阅读 · 0 评论 -
Educational Codeforces Round 11 D. Number of Parallelograms 【pair的使用】
平行四边形对角线两点连线的中点相同,利用这个性质可以快速计算。#include<bits/stdc++.h>using namespace std;map<pair<int,int>,int>mp;int x[2048],y[2048];int main(){ int n,i,j; long long ans; scanf("%d",&n); for(i=0;原创 2016-04-13 08:57:25 · 284 阅读 · 0 评论 -
Codeforces Alpha Round #21 C. Stripe 2 【DP+标记想法】
注意答案会超过int范围#include<bits/stdc++.h>using namespace std;typedef long long ll;ll a[100000+5],sum[100000+5];int main(){ int n,i; ll ans,x; memset(sum,0,sizeof(sum)); scanf("%d",&n);原创 2016-04-08 12:28:26 · 337 阅读 · 0 评论 -
Educational Codeforces Round 1 C. Nearest vectors 【极角排序atan2法】
题目链接 atan2(y,x)计算点(x,y)和x正半轴的夹角(弧度制)。#include<bits/stdc++.h>using namespace std;typedef long double ldb;const ldb pi=3.1415926535897932384626433832795028841971;struct node{ int id; ldb arc原创 2016-04-03 11:11:17 · 368 阅读 · 0 评论 -
Educational Codeforces Round 10 D. Nested Segments 离散化+树状数组
首先将输入的l和r离散化,利用树状数组对所以r加一。之后再以l为关键字进行排序。从l小的开始考虑,ans=sum(r-1)-sum(l),之后再将r所在的树状数组减1。/* ***********************************************Author :MaltubEmail :xiang578@foxmail.comBlog原创 2016-03-30 14:49:20 · 313 阅读 · 0 评论 -
Educational Codeforces Round 10 E. Pursuit For Artifacts 强连通缩点+bfs
给定的图如果存在环,环内每一个点都可以相互达到,所以可以用强连通算法进行缩点。缩完点之后,图中所有的点之间只有一条路可以到达,直接可以用bfs进行求解。#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <原创 2016-03-30 14:42:57 · 463 阅读 · 0 评论 -
CF#340(缺少E莫队算法)
617A. Elephant 贪心,刚开始选择每一步走5,最后一步选择能到终点的长度。总的步数为x/5,如果x%5为真,结果为x/5+1617B. Chocolate 1. 最特殊的是全部输入为0,输出应该为0 2. 记两个1之间0的个数为x,那么就多x+1中分割方法,即ans=ans*(x+1)617C. Watering Flowers 有一个特点,所有点不是被r1覆盖就是被r2覆盖。原创 2016-01-25 14:03:06 · 398 阅读 · 0 评论 -
cf602e New Year Tree dfs序+二进制+线段树区间修改
/* ***********************************************Author :MaltubEmail :xiang578@foxmail.comBlog :htttp://www.xiang578.top************************************************ */#原创 2016-01-23 11:49:38 · 548 阅读 · 0 评论 -
cf76e Points 【降维】
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=100000+10;ll ans,sx2,sx;ll x[N],y[N];int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++) {原创 2016-05-11 20:29:11 · 374 阅读 · 0 评论 -
Educational Codeforces Round 12 E. Beautiful Subarrays【字典树】
/* ***********************************************Author :MaltubEmail :xiang578@foxmail.comBlog :htttp://www.xiang578.top************************************************ */#原创 2016-04-30 09:07:57 · 454 阅读 · 0 评论 -
Codeforces Round #352 (Div. 2) C. Recycling Bottles
/* ***********************************************Author :MaltubEmail :xiang578@foxmail.comBlog :htttp://www.xiang578.com************************************************ */#原创 2016-05-25 08:31:47 · 312 阅读 · 0 评论 -
Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor【模拟+链表】
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include<stack>using namespace std;const int N=500000+10;struct node{ int from,next,to;}p[N];char s[N],c[N];int mai原创 2016-05-20 20:05:19 · 453 阅读 · 0 评论 -
Codeforces Round #350 (Div. 2) D2 Magic Powder - 2【二分】
#include<bits/stdc++.h>using namespace std;int n;long long a[100000+10],b[100000+10],k;int get(long long x){ long long tmp=0; for(int i=0;i<n;i++) { if(a[i]*x>b[i]) {原创 2016-05-20 15:41:06 · 366 阅读 · 0 评论 -
cf653d Delivery Bears【二分+网络流】
二分熊携带的货物重量,然后再用网络流检查当前情况有几只熊可以到达。#include<stdio.h>#include<string.h>#include<queue>#include<vector>#include<algorithm>#include<math.h>using namespace std;const int N=1024;const int inf=1<<24;c原创 2016-05-14 10:04:53 · 417 阅读 · 0 评论 -
Codeforces Round #349 (Div. 2) D. World Tour 【spfa+暴力枚举】
/* ***********************************************Author :MaltubEmail :xiang578@foxmail.comBlog :htttp://www.xiang578.com************************************************ */#原创 2016-05-06 22:05:15 · 690 阅读 · 0 评论 -
Codeforces Round #349 (Div. 2) C. Reberland Linguistics 【DP】
/* ***********************************************Author :MaltubEmail :xiang578@foxmail.comBlog :htttp://www.xiang578.com************************************************ */#原创 2016-05-06 17:03:30 · 637 阅读 · 0 评论 -
Codeforces Round #200 (Div. 1)D. Water Tree 【dfs序+线段树】
方法1把树按照dfs序展开,用线段树维护子树和,设0表示empty,1表示filled操作1:若子树v存在0节点,则把v的父亲【in[fa],out[fa]】更新成0。然后把【in[v],out[v]】更新成1操作2:把节点v更新成0操作3:询问【st[v],ed[v]】区间内是否有0节点,没有则表示1方法2 用两棵线段树维护,对于操作1,第一棵线段树区间加1,对于操作二,变空的点加1,原创 2016-05-02 13:43:39 · 579 阅读 · 0 评论