AGC049 題解 總結

2022-05-31 11:18:11 字數 1180 閱讀 1373

agc仍舊是那麼毒瘤……

%%%gmh77

幹了1h多都幹不出來,自閉……

操作相當於:選擇某個\(1\),將其左移一位,如果左邊也有\(1\)就抵消。

從左往右掃,把遇到的\(t\)的\(1\)搞個佇列,遇到的\(s\)的\(1\)就先嘗試配對佇列中第乙個,如果隊列為空就嘗試消掉前面乙個未配對的。

wa了4次最後10min內交的……

可以發現:對於編號\(i\),兩種情況:要麼\(i\)一直向左走完全程,要麼\(i\)沒有開始走就被摧毀了。

可以直接貪心讓每個都走完全程,除了走完全程會到達\(0\)的。接下來就會形成一些空隙,存在一些走完全程到達\(0\)的沒有被覆蓋。讓它合法有兩種方法:1. 讓後面的延長覆蓋它。2. 將自己縮短到不會覆蓋\(0\)。

選了第二種方法後,前面的都不用考慮了。所以直接列舉選第二種方法的是哪個,後面的都用第一種方法。

注意縮短自己時也能補足他人,所以是取max。

using namespace std;

#include #include #include #include #define n 200005

#define inf 1000000000

#define ll long long

int n;

ll a[n],b[n];

int main(){

scanf("%d",&n);

for (int i=1;i<=n;++i) scanf("%lld",&a[i]);

for (int i=1;i<=n;++i) scanf("%lld",&b[i]);

ll l=a[n]+1,sum=0,ans=llong_max;

for (int i=n;i>=1;--i){

if (a[i]-b[i]>0)

l=min(l,a[i]-b[i]);

else{

ans=min(ans,max(sum,b[i]-a[i]+1));

// ans=min(ans,sum+b[i]-a[i]+1);

if (a[i]

對於agc這種神仙比賽,a題不一定是最水的,有可能一直做不出來。所以要學會盡快換題看看。

然而a題可能實際上也很水,這考驗換角度思考的能力。

細節想清楚再交,不然罰時很慘烈。

比賽的時候千萬不要把gmh77的做題進度放在心上,會擾亂心態。

AGC 049 部分簡要題解

nmd 差1分鐘過 e,真就老年選手不配進第一頁 ll 計算每個點的貢獻,做完了 includeusing namespace std typedef long long ll const int n 110 string s n int n bitsettow n int main int s n...

AGC047 簡要題解

注意精度問題即可 建顆 trie 樹搞一搞即可 考慮用原根解決此問題,乘法變為了加法,因此用桶記錄一下 fft 即可 觀察題目性質容易發現樹高事 log n 的,即使是暴力列舉第一棵樹最淺的點複雜度也正確。因此就暴力列舉,那麼一條合法的路徑肯定是分別走向兩個兒子的,考慮從左兒子走到第二棵樹每個節點的...

AGC025簡要題解

b rgb coloring 一道簡單題,列舉即可。c interval game 考慮可以進行的操作只有兩種,即左拉和右拉,連續進行兩次相同的操作是沒有用的。左拉時肯定會選擇右端點盡量小的,右拉選擇左端點盡量大的,所以排序之後貪心即可。d choosing points 首先證明對於所有 d 假設...