第一题,是啥吧,就是让你找最长区间,区间特性就是平均数要最大。所以你只要贪心地搞最大的就行了。找到最大的连续最大值区间。
第二题就坑爹,不是人家题坑爹,简单地一匹,哎,可是
忘了取整这回事了。假设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];