牛客多校 —— 第三場
阿新 • • 發佈:2020-07-18
A. Clam and Fish
題意
小月有 \(n\) 單位的時間都在釣魚,每個單位時間有四種狀態,有蛤蜊/沒蛤蜊 , 有魚/沒魚。小月事先知道這 \(n\) 個時間點的狀態。每個時間點有四種可能的動作:
- 若該時間點有魚,則可以直接釣魚。
- 若該時間點有蛤蜊,則可以用該蛤蠣製作一個魚餌。
- 若該時間點身上有至少一個魚餌,則可以用一個魚餌釣一條魚,釣完後就少 了一個魚餌。
- 什麼事都不做。
請問小月最多可以釣多少條魚。
資料範圍
\(1\leq t \leq 2.5 \times 10^{5}\)
\(1\leq n \leq 2\times 10^{6}\)
題解
只需要考慮什麼都沒有的和有蛤蜊的數量,其他的直接釣魚即可
如果當前第0類和第1類匹配後還剩下\(x\)
Code
cpp
#include<bits/stdc++.h> using namespace std; #define rep(i,a,n) for(int i=a;i<n;i++) #define per(i,a,n) for(int i=n-1;i>=a;i--) #define fi first #define se second #define ll long long #define pb push_back typedef pair<long long,long long> pll; typedef pair<int,int> pii; typedef vector<int> vi; typedef vector<long long> vll; typedef double db; const ll mod=1e9+7; ll powmod(ll a,ll b,ll p){ll res=1;a%=p;while(b){if(b&1) res=res*a%p;a=a*a%p;b>>=1;}return res;} ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;} int _; const int N = 2e6+10; int sum; int n; char s[N]; int pe[N]; int main(){ for(scanf("%d",&_);_;_--){ sum=0; scanf("%d",&n); scanf("%s",s+1); int ans=0; rep(i,1,n+1){ if(s[i] == '0') { if(sum) { ans++;sum--;} } else if(s[i] == '1'){ sum++; } else if(s[i] == '2') ans++; else ans++; } ans+=sum/2; printf("%d\n",ans); } }
B. Classical String Problem
題意
有一個字串,有兩種操作:
- 詢問第 x 個字元。
- 把最左邊的 x 個字元搬到最右邊或把最右邊 x 個字元搬到最左邊。
每次詢問輸出當前位置的字元
資料範圍
題解
Code
</details>