视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CodeforcesRound#280(Div.2)解题报告A.B.C.D.E._html/css
2020-11-27 15:59:12 责编:小采
文档

不知道到底是我的水平提高了还是CF的题目变水了。。。

A - Vanya and Cubes

水题。暴力枚举就可以。

代码如下:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define LL __intconst int INF=0x3f3f3f3f;int s[100], sum[100];int main(){ int n, i; s[1]=1; sum[i]=1; scanf("%d",&n); for(i=2;i<=10000;i++){ s[i]=s[i-1]+i; sum[i]=sum[i-1]+s[i]; if(sum[i]>=n)break; } printf("%d\n",i-1); return 0;}

B - Vanya and Lanterns

水题。暴力找两个相邻之间的最短距离/2,然后再与边界的比较找最长距离。

代码如下:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define LL __intconst int INF=0x3f3f3f3f;int a[2000];int main(){ int n, l, i, j; double d, max1=-1; scanf("%d%d",&n,&l); a[0]=0; a[n+1]=l; for(i=1;i<=n;i++){ scanf("%d",&a[i]); } sort(a,a+n+2); for(i=2;i<=n;i++){ max1=max(max1,(a[i]-a[i-1])/2.0); } max1=max(max1,a[1]-0.0); max1=max(max1,l*1.0-a[n]); printf("%.10lf\n",max1); return 0;}

C - Vanya and Exams

贪心。

从所需论文少的开始累加。

代码如下:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define LL __intconst int INF=0x3f3f3f3f;struct node{ LL f, e;}fei[110000];int cmp(node x, node y){ return x.e=r) continue ; if(ss-(r-fei[i].f)<=0){ ans+=ss*fei[i].e; break; } else{ ss-=r-fei[i].f; ans+=fei[i].e*(r-fei[i].f); } //printf("%d\n",ss); } printf("%Id\n",ans); return 0;}

D - Vanya and Computer Game

比赛的时候想到了二分时间,找到时间后怎么判断是谁的一直没想出来。第二天才恍然大悟。只要判断是否整除就可以了。。当时为啥没想到呢。。郁闷。

先放大时间轴,1/x和1/y秒放大到y和x,然后二分时间,找到时间后,判断是否整除即可。

代码如下:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define LL __intconst int INF=0x3f3f3f3f;int main(){ LL n, x, y, i, z, low, high, mid, ans; scanf("%Id%Id%Id",&n, &x, &y); while(n--) { scanf("%Id",&z); low=1; high=1e16; while(low<=high) { mid=low+high>>1; if(mid/x+mid/y>=z) { high=mid-1; ans=mid; } else low=mid+1; } if(ans%x==0&&ans%y==0) puts("Both"); else if(ans%x==0) puts("Vova"); else puts("Vanya"); } return 0;}

E - Vanya and Field

感觉这次的E题好水。。首先因为为1,所以可以保证n个数都可以访问到而且不会重复。所以可以默认让他从横坐标为0的某点出发的。然后当纵坐标为0时,可以找到x坐标与y坐标的一个映射关系,保存下来。然后每输入一个坐标,就可以用公式来判断出是从哪个点出发的。然后找到最多的那个出发点就可以了。

代码如下:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define LL __intconst int INF=0x3f3f3f3f;int _hash[1100000], a[1100000];int main(){ int n, m, dx, dy, i, j, x, y, pos, max1; scanf("%d%d%d%d",&n,&m,&dx,&dy); x=y=0; for(i=0;i

下载本文
显示全文
专题