codeforces 1117(第三场div2)

第一题,是啥吧,就是让你找最长区间,区间特性就是平均数要最大。所以你只要贪心地搞最大的就行了。找到最大的连续最大值区间。
第二题就坑爹,不是人家题坑爹,简单地一匹,哎,可是
忘了取整这回事了。假设m/(k+1)是次数,然后要乘以权重,你不能这样写,
w*m/(k+),因为这样和可能就不是次数了,乘以w之后,几乎次数就变了。哎,还不如预先处理
像。ll x=m/(k+1),然后再乘。不错不错,真不错。
第三题就不会了。、
给你一个点坐标,要去到另一个点,给你n天的风向,循环。问你最小的天数到达,或者不可能。还有每天可以选择走一个方向,也就是顺风会多走一个,逆风估计就停留原地,似乎还可以选择不走。
太强了吧,还有标程耶
在这里插入图片描述

#include <bits/stdc++.h>

using namespace std;

#define x first
#define y second

const int N = 100009;

pair<int, int> st, fi;
int n;
string s;

string mv = "UDLR";
int dx[] = {
    
    0, 0, -1, 1};
int dy[] = {
    
    1, -1, 0, 0};

pair<int, int> d[N];

int main(){
    
    
	cin >> st.x >> st.y >> fi.x >> fi.y;
	cin >> n >> s;		

	for(int i = 0; i < n; ++i){
    
    
		int id = -1;
		for(int j = 0; j < 4; ++j)
			if(mv[j] == s[i])
				id = j;
		assert(id != -1);
		d[i + 1] = make_pair(d[i].x + dx[id], d[i].y + dy[id]);
	}

	long long l = 0, r = 1e18;
	while(r - l > 1){
    
    
		long long mid = (l + r) / 2;
		long long cnt = mid / n, rem = mid % n;
		long long x = st.x + d[rem].x + cnt *  1LL * d[n].x;
		long long y = st.y + d[rem].y + cnt *  1LL * d[n].y;
		long long dist = abs(x - fi.x) + abs(y - fi.y);
		if(dist <= mid)
			r = mid;
		else
			l = mid;	
	} 

	if(r > 5e17) r = -1;
	cout << r << endl;

	return 0;
}

太深奥了,看不懂标程。
还是看国内大佬的吧

第四题,然后给n个空间,m是一个魔法师可以分解成m个普通魔法石,原来应该是由无限个魔法石,问你有多少种方案,可以占据n个空间,魔法石和普通魔法石都占据1个,但是如果魔法石分解就会占据m个空间。
你应该是要把n个空间填满。

在这里插入图片描述
应该是dp[i]=dp[i-m]+dp[i-1];

猜你喜欢

转载自blog.csdn.net/qq_46264636/article/details/109753033