Codeforces Educational Codeforces Round 62 (Rated for Div. 2) ABCD

A. Detective Book

传送门:http://codeforces.com/contest/1140/problem/A

题意:

  一本书有 n 页,每页有第 ai 页才会解释的秘密。每天读新的一页,直到所有今天读到的秘密都被解答,问几天读完。

思路:

  跑一遍for循环,记最大的页数 cnt 直到 cnt = i 一天就结束。

AC代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define P pair
#define ll long long
#define ull unsigned long long
#define lson id*2,l,mid
#define rson id*2+1,mid+1,r
#define ls id*2
#define rs (id*2+1)
#define Mod(a,b) a

 

B. Good String

传送门:http://codeforces.com/contest/1140/problem/B

题意:

  一个字符串只含有 '<' 和 '>','<' 能将其左边一个字符删去,'>'同理。一个字符串如果经过一系列操作能只剩一个字符,那么叫做 Good String ,问给定的字符串至少删去几个字符才能成为 Good String 。

思路:

  从左往右找第一个 '>'出现的位置,从右往左找第一个 '<'出现的位置,其中最小值就是答案。

AC代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define P pair
#define ll long long
#define ull unsigned long long
#define lson id*2,l,mid
#define rson id*2+1,mid+1,r
#define ls id*2
#define rs (id*2+1)
#define Mod(a,b) a> str;
		int len = str.length();
		int ans = n - 1;
		for(int i=0;i') {
				ans = min(ans, i);
				break;
			}
		}
		for (int i = len - 1; i >= 0;i--) {
			if (str[i] == '<') {
				ans = min(ans, (len - 1) - i);
				break;
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}

 

C. Playlist

传送门:http://codeforces.com/contest/1140/problem/C

题意:

  给 n 首歌,每首都含有 t , b 这两个属性,选取 k 首, pleasure = 所有 t 的和 * 其中最小的 b 。问 pleasure 最大多少。

思路:

 将 n 首歌按 b 从大到小排序,维护 k 首歌的 t 的和的最大值,不断 * b更新 ans 即可。

AC代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define P pair
#define ll long long
#define ull unsigned long long
#define lson id*2,l,mid
#define rson id*2+1,mid+1,r
#define ls id*2
#define rs (id*2+1)
#define Mod(a,b) a b.b;
}

struct cmp1 {
	bool operator()(ll a,ll b){
		return a > b;
	}
};

int main()
{
	while (~scanf("%d%d", &n, &k)) {
		for (int i = 0; i < n; i++)
			scanf("%lld%lld", &a[i].t, &a[i].b);
		sort(a, a + n, cmp);
		ll ans = 0, tot = 0, minn = INF;
		priority_queue, cmp1> que;
		for (int i = 0; ik) {
				tot -= que.top();
				que.pop();
			}
			minn = min(minn, a[i].b);
			ans = max(ans, tot*minn);
		}
		printf("%lld\n", ans);
	}
	return 0;
}

 

D. Minimum Triangulation

传送门:http://codeforces.com/contest/1140/problem/D

题意:

  给一个正 n 边形,顶点序号按逆时针方向。

  将正 n 边形分割成若干个三角形,每个三角形的权值为顶点序号的乘积,求最小的权值之和。

思路:

  不断从点1分割就行了。

AC代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define P pair
#define ll long long
#define ull unsigned long long
#define lson id*2,l,mid
#define rson id*2+1,mid+1,r
#define ls id*2
#define rs (id*2+1)
#define Mod(a,b) a

 

你可能感兴趣的:(Codeforces,Codeforces,Codeforces)