#298 (div.2) B. Covered Path

1.题目描述:点击打开链接

2.解题思路:本题利用贪心法解决。一开始想着利用dfs解决,不过最终意料之中地TLE了,因为每次可以选择的速度增加量有很多,一共2*d个,这样的话,时间复杂度是O(T*D^T)达到了指数级别。所以应当改变思路,想办法求出每个时刻的最大值。通过尝试可以发现,每个时刻的最大值都满足一定的约束关系。设此时为时刻i,上一次的速度为p,那么本次的速度应为max(p+d,v2+(t-i)*d),因为要保证最终一定能够返回到v2。这样以来便可以得到每个时刻的最大值,然后累加求和即可。

3.代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<functional>
using namespace std;
int maxs;
int v1, v2, t, d;
int a[110], vis[110];

int main()
{
	//freopen("t.txt", "r", stdin);
	while (~scanf("%d%d", &v1, &v2))
	{
		scanf("%d%d", &t, &d);
		a[0] = v1;
		int cur = 0, p = v1;
		for (int i = 2; i <= t; i++)
		{
			int j = t - i;
			p = min(p + d, v2 + j*d);//通过约束关系来确定时刻i的最大值
			a[++cur] = p;
		}
		int sum = 0;
		for (int i = 0; i <= cur; i++)
			sum += a[i];
		cout << sum << endl;
	}
	return 0;
}
时间: 2024-10-07 10:39:04

#298 (div.2) B. Covered Path的相关文章

Codeforces Round #298 (Div. 2) B. Covered Path

题目大意: 一辆车,每秒内的速度恒定...第I秒到第I+1秒的速度变化不超过D.初始速度为V1,末速度为V2,经过时间t,问最远能走多远. 分析 开始的时候想麻烦了.讨论了各种情况.后来发现每个时刻的最大值都满足一定的约束关系.设此时为时刻i,上一次的速度为p,那么本次的速度应为max(p+d,v2+(t-i)*d),因为要保证最终一定能够返回到v2.这样以来便可以得到每个时刻的最大值,然后累加求和即可. 1 #include<cstdio> 2 #include<iostream>

Codeforces Round #298 (Div. 2) A、B、C题

题目链接:Codeforces Round #298 (Div. 2) A. Exam An exam for n students will take place in a long and narrow room, so the students will sit in a line in some order. The teacher suspects that students with adjacent numbers (i and i + 1) always studied side

Codeforces Round #298 (Div. 2)

A - Exam 构造 1 #include <cstdio> 2 3 int ans[5000 + 5]; 4 5 int main() { 6 int n, cnt = 1; 7 scanf("%d", &n); 8 for (int i = 1; i <= n; i++) { 9 if (i&1) ans[i] = cnt; 10 else { 11 ans[i] = n+1-cnt; 12 cnt++; 13 } 14 } 15 ans[0]

Codeforces 534B Covered Path(贪心)

题意  你在路上走 每秒钟的开始都可以改变自己的速度(改变速度都是瞬间完成的)  知道你开始的速度v1 结束时的速度v2  整个过程所用时间t  以及每秒最多改变的速度d  求这段时间内你最多走了多远 最优的肯定是先把速度从v1升到最大  然后从最大减到v2  使得用的时间不会超多t   因为肯定是足够从v1减为或升到v2的   那么我们只用从两端往中间靠  哪边的速度小  哪边就加上d  知道两边相邻  这样就能保证每次改变的速度都最大  而且最后两端的速度差也不会大于d  也就是最优答案了

#298 (div.2) C. Polycarpus&#39; Dice

1.题目描述:点击打开链接 2.解题思路:本题是一道数学题,很可惜在比赛时候没有注意到最大数的范围,然后被Hack了,瞬间rating变得不忍直视==.还是耐心总结,好好准备下一场比赛吧.本题要求找每个筛子不可能出现的数字的个数.可以通过确定可能值的边界来解决.假设所有筛子出现的数字之和是tot,那么每个筛子的最大范围是min(A-(n-1),num[i]),即当其他筛子都取1时的情况和筛子i自身的最大值的较小者.同理不难得到最小范围是max(1,A-(tot-num[i])).这样以来,不可能

Codeforces 534B - Covered Path

534B - Covered Path 思路:贪心,每一秒取尽可能大速度. 画张图吧,不解释了: 代码: #include<bits/stdc++.h> using namespace std; #define ll long long int dp[105],dp1[105]; int main() { ios::sync_with_stdio(false); cin.tie(0); int v1,v2,t,d; cin>>v1>>v2>>t>>

[VJ][暴力枚举]Covered Path

Covered Path Description The on-board computer on Polycarp's car measured that the car speed at the beginning of some section of the path equals v1 meters per second, and in the end it is v2meters per second. We know that this section of the route to

Codeforces534B:Covered Path

The on-board computer on Polycarp's car measured that the car speed at the beginning of some section of the path equals v1 meters per second, and in the end it is v2 meters per second. We know that this section of the route took exactly t seconds to

#298 (div.2) D. Handshakes

1.题目描述:点击打开链接 2.解题思路:本题是一道模拟题.要求找出一个队列,使得队列中的每个人的握手次数符合输入的情况,如果不存在输出无解.其中每三个人可以在任何时刻组成一个队伍开始比赛,后面的人不能再与他们握手.通过手动操作与观察可以发现,如果把队列中的人的握手次数均取除以3后的余数.那么正好形成0 1 2 0 1 2....的循环序列.所以可以通过这个来模拟该过程.事先用map保存握手次数i下对应的列表.接下来用一个变量j控制所到达的握手次数,如果发现j≥3且此时的队列为空,那么就缩小3看