1. 程式人生 > 其它 >2022年桂林電子科技大學程式設計競賽(同步賽)

2022年桂林電子科技大學程式設計競賽(同步賽)

《星露穀物語》(Stardew Valley)是一款開放式鄉村模擬經營類遊戲。

你可以在星露谷度過一段有趣而充實的時光,清晨起床開啟電視看看近日天氣預報,跟著電視節目學習製作新的料理,上午給自己的農田澆水,去牧場給小雞喂飼料,順手摸摸自己的小貓咪。中午找個合適的垂釣點釣兩條魚,也可以去礦洞裡敲兩塊礦石,揮劍趕跑不懷好意的史萊姆,傍晚在小鎮的酒吧和鎮民們閒聊,找到自己喜歡的女孩子(或者男孩子)送一件她心儀的禮物,你看著揹包裡用來求婚的美人魚吊墜,等到時機成熟的時候.......

眾所周知,星露穀物語是一款很休閒的遊戲,Dilhao最喜歡的做的事就是在家裡照料自己的花田。Dilhao的花田有n朵花,他們整齊的排成一排,每朵花有不同的高度,第i朵花的高度為hi。

這天Dilhao看著自己的花田突然犯了強迫症,他覺得這些花的高度參差不齊實在是太醜了,他希望自己的花田的高度是有序的,左邊的花的高度要小於等於右邊的花的高度。為了完成自己的目的,Dilhao決定斥巨資購入強力化肥,每一袋強力化肥可以讓任意一段區間的花的高度+1,現在Dilhao想問問你,他最少需要買多少袋強力化肥才能讓花田的高度變成單調不減的?

題解:

#include <bits/stdc++.h>
#define fo(i, x, y) for (int i = int(x); i <= int(y); ++i)
#define fd(i, x, y) for (int i = int(x); i >= int(y); --i)
#define
fi first #define se second using namespace std; using ll = long long; using pii = pair<int, int>; int main() { //freopen("t.in", "r", stdin); //freopen("t.out", "w", stdout); ios::sync_with_stdio(0); cin.tie(0); ll n, r, sx, sy; cin >> n >> r >> sx >> sy; auto checkcir
= [&](ll x, ll y)->bool { return (x - sx) * (x - sx) + (y - sy) * (y - sy) <= r * r; }; auto checkrec = [&](ll x, ll y, ll xx, ll yy)->bool { return x <= sx && sx <= xx && y <= sy && sy <= yy; }; while (n--) { char c; ll x, y, w; cin >> c >> x >> y >> w; if (c == 'U') { if (checkcir(x, y) || checkcir(x, y + w) || checkrec(x - r, y, x + r, y + w)) { cout << "YES\n"; return 0; } } else if (c == 'D') { if (checkcir(x, y) || checkcir(x, y - w) || checkrec(x - r, y - w, x + r, y)) { cout << "YES\n"; return 0; } } else if (c == 'L') { if (checkcir(x, y) || checkcir(x - w, y) || checkrec(x - w, y - r, x, y + r)) { cout << "YES\n"; return 0; } } else if (c == 'R') { if (checkcir(x, y) || checkcir(x + w, y) || checkrec(x, y - r, x + w, y + r)) { cout << "YES\n"; return 0; } } } cout << "NO\n"; return 0; }

執行結果: