日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ 3814. 【NOIP2014模拟9.7】天黑黑

發布時間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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】天黑黑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。