JZOJ 3814. 【NOIP2014模拟9.7】天黑黑
Description
我走在每天必須面對的分岔路/我懷念過去單純美好的小幸福/愛總是讓人哭/讓人覺得不滿足/天空很大卻看不清楚/好孤獨/天黑的時候/我又想起那首歌/突然期待下起安靜的雨/原來外婆的道理早就唱給我聽/下起雨/也要勇敢前行/我相信/一切都會平息/我現在好想回家去/天黑黑/欲落雨/天黑黑/黑黑
當整個世界陷入黑暗的時候,身為光明之神的Zyh想要用自己的若干個能量源和若干個集流器將這些能量源并成一個最大的能量源,這樣他就可以造出最大的燈來照亮整個世界。
具體地來說每個能量源可以直接給出Ei的能量。而每個集流器是由兩個接受端口和一個輸出端口組成的。集流器有兩種:A類和B類。A類是疊加集流器,可以將兩個接收端口的能量疊加并輸出。B類是取代集流器,可以將兩個接受端口的能量較大那個輸出。
現在有n-1個集流器,n個能量源。Zyh給出了集流器的連接方式,他想知道怎樣放置能量源,能夠使最后的輸出最大化。
Input
第一行是一個字符串,表示連接的方式。給出的形式是這樣的:X,表示一個單獨的輸出能量源的放置處;AS1S2,其中S1和S2表示兩個輸出能量,A表示使用疊加集流器將能量并成一個,然后這本身也成為一個新的輸出能源;BS1S2也是同理,只不過是使用取代集流器。并且保證A和B的個數為n-1個。X的個數為n個。
第二行是n個正整數,表示這幾個能量源。
Output
一個數,表示最大的輸出能源。
Sample Input
輸入1:
BXBXX
8 2 3
輸入2:
AXBXX
8 2 3
Sample Output
輸出1:
8
輸入2:
11
Data Constraint
對于 20% 的數據 n<10
對于 60% 的數據 n<=3000
對于 100% 的數據 n<=200000Ei<=10000
Hint
Solution
這題實在太坑啦啦啦!!!
先前我打了一個本應 AC 的程序,但由于 OJ 更新把棧限制深度改小了
導致 莫名 錯誤,調了我幾個小時,很來改用人工棧也迷之WA!
好了,回歸正題,這題的正解處理很簡潔
觀察題目,A只會使答案增加,而B卻放棄了一些元素
那么貪心地填,將元素排序,選擇最終剩余元素個數的那些即可!
使用一個棧,維護可用元素個數,從字符串的后面往前掃,遇到X則壓棧,即
Stack[++top]=1如果遇到A,則合并兩個元素,即:
Stack[top?1]+=stack[top],top??如果是B,就取兩個元素的最大值,即:
if(stack[top]>stack[top?1])stack[top?1]=stack[top],top??;那么最后 Stack[1] 就是可用元素個數了,依次累加答案即可!
這樣時間復雜度就是 O(N) !
Code
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=200002; int n,top,ans; int a[N],stack[N]; char s[N*2]; inline int read() {int data=0; char ch=0;while(ch<'0' || ch>'9') ch=getchar();while(ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar();return data; }//讀入優化 void put(int x) { int num=0; char c[11];while(x) c[++num]=(x%10)+48,x/=10;while(num) putchar(c[num--]); }//輸出優化 int main() {scanf("%s",s+1);for(int i=strlen(s+1);i;i--)if(s[i]=='X') stack[++top]=1,n++; elseif(s[i]=='A') stack[top-1]+=stack[top],top--; else{if(stack[top]>stack[top-1]) stack[top-1]=stack[top];top--;}for(int i=1;i<=n;i++) a[i]=read();sort(a+1,a+1+n);for(int i=n-stack[1]+1;i<=n;i++) ans+=a[i];put(ans);return 0; } 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的JZOJ 3814. 【NOIP2014模拟9.7】天黑黑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JZOJ 1219. Num
- 下一篇: JZOJ 3822. 【NOIP2014