Test on 12/01/2018
阿新 • • 發佈:2018-12-01
bool .... align 假設 center alt fir -i dfs
“加法符號寫歪了,變成了乘法符號,在算式的第三行那個地方。”櫻島麻衣突然開口。
心領神會的梓川咲太立刻發現自己正在寫的題目的錯誤,乖乖的改正了以後卻心不在焉。
畢竟,梓川咲太的眼神卻很不老實,畢竟,眼前坐著野兔先輩。
“咲太,假設我給你一個正整數n,你是不是可以把它用許多不同的整數(包括它自己)去減然後把n變成0?”
櫻島麻衣開始穿上披風。
這是生氣的前兆,即將沒了眼福的梓川咲太只能不停的點了點頭。
“那行,一個正整數n的做減法的操作過程也有很多種,比如說6就能變成6-6=0,6-1-5=0和6-2-4=0,對吧。但是不能變成6-3-3=0,因為3重復了。”
櫻島麻衣用漂亮的字體在筆記本上書寫。
“當然寫成6=6,6=1+5,6=2+4更好,相當於這些正整數構成一個序列{a1,a2,...,an}滿足(Σai = N),(n >= 1),且這些正整數互不相同。”
“那麽剛剛的例子就是{6},{1,5},{2,4}這樣。”
“有沒有想過把這些序列的數字乘起來呢?就像加法符號變成乘法一樣,結果就是6,1x5,2x4這樣......“
”就把這樣操作後的結果稱為M吧,對於一個正整數n,不同的拆分能得出不同的M,但M也是有最大值和最小值的。比如說剛剛那個例子,M的最大值是8,最小值是5。”
此時的梓川咲太還不知道即將到來的地獄。
“你剛剛的眼神這麽不老實,大概看了幾十下了吧。我就大發慈悲的寫一些數字,你給我馬上寫出每個數字經過操作以後得出來的M的最小值和最大值。”
“不把這些寫完,今晚不讓你睡哦。”
麻衣打開的筆記本上密密麻麻的排列著許多數字,野兔先輩的代價實在是太大了,不過約定就是約定......
第一行輸入一個正整數T(T<=200),表示樣例組數,接下去T行每行表示一組樣例
每組樣例,輸入一個正整數N(1<=N<=200)
梓川咲太一邊看應考的題目一邊聽著聲音的變化,同時思索該如何回答考察數學思維的題目......
就算解決了牧之原翔子和櫻島麻衣的問題,也終究要面對現實的考驗。
“梓川你不是要和櫻島麻衣前輩考同一個大學嗎?”
雙葉理央坐在咲太的面前,今天也依然披著白大褂,正在準備不知名的實驗。
“是啊。之前不是說過嗎?所以我現在忙於備考。”
“我就友善的提醒你一句...”
“什麽?”
“你看的是我的算法競賽書......”雙葉理央用略帶擔憂的聲音這麽說著。
梓川咲太突然回過神來,他翻了翻書本後面的內容,的確是和程序有關。但是前面的例題部分做的卻和普通的參考書別無二致。
雙葉拿回了她的算法書,找著梓川剛剛在看的部分。
“給出一個大於等於2的正整數n,對於一對數a和b(2<=|a|,|b|<=n,a!=b),如果存在一個整數x(|x|>=1)使得ax=b(或bx=a),就可以將a轉換成b(或將b轉換為a),轉換後,你可以獲得|x|的積分。”
一邊說著,雙葉就開始在黑板上寫一些算式。
“不過,限制條件是,轉換完畢後,就不能再使用由a轉換成b或b轉換成a的轉換方式了。“
”一開始擁有的積分是0,現在給一個大於等於2的正數n,可以在2~n都取一次起點進行轉換(更換起點時,轉換方式不初始化)。請問最多可以獲得多少分?”
“雙葉老師,我實在是聽不懂。”
梓川咲太很爽快的袒露了事實。
“
比如說n等於4的時候答案是11,因為
取起點為2時,你的最多得分是9。其中的一種得分方式是 2→(-2)→4→2→(-4)→(-2);
取起點為3時,你只能得1分,3→(-3);
取起點為4時,你別的轉換方式都使用過,因此只能得1分,4→(-4)。
所以最終答案是9+1+1=11,明白了嗎?
”
黑板上已經密密麻麻寫了一堆公式,在右下角又寫了一個Accepted。看來雙葉理央已經在腦內解決了這個問題。
不過對於咲太來說這依舊是一個難題。雖然不是應考的範圍,但既然看了這麽久,也就順便解答出來吧。
對於每一組數據,輸入一個整數n(2<=n<=100000)
保證n的個數小於200,n的總和不超過5000000
“雪是紅色的。”
像壞掉的復讀機一樣,梓川咲太只能把閃爍的思緒斷斷續續的說出來。
“這,是夢吧。”
從口中滑出的卻是這樣的話。
回過神的時候,天空即將被冰冷黑暗的天空吞沒,而自己已經站在湘南臺站附近的圖書館的門口。那是第一次遇見櫻島麻衣的地方,是一切的開端。
無所謂了,已經沒有可以稱為家而能回去的地方了。就在梓川咲太開始自暴自棄的躺在地上任由黑暗吞噬的時候。
眼前突然出現了穿著白大褂的年輕女子,在昏暗的路燈下,隨風飄揚的似乎是紅色的秀發。
“不要去輕易的改變過去。”開口便是這麽難懂的話。
“打個比方,對於一個長度為n,所有元素都為0的數列。每次操作都選取一個位置,使得從這個位置往後都變成1,4,9,16...i^2 ”
“不可思議啊,為什麽我一直在,為什麽你們,一直在讓我做這種數學題。”梓川咲太快瀕臨崩潰了。
“為了拯救櫻島麻衣和牧之原翔子。這樣的理由夠充分嗎?”那位女子的一句話,讓咲太的精神從深海下看到一束光。
“你能計算出經過這麽多次操作以後變得面目全非的數列的和嗎?”
“不可隨便改變過去,就剛才那個比方來說,如果有很多次這樣的操作,那麽這個數列的和也很難計算吧。”
“可你現在就是面臨這個問題哦。計算出那個數列的和,你一定能夠知道答案。”這是只有擁有確信的心的人才能說出來的話。
“算出來以後呢。”梓川咲太還需要最後一塊拼圖。
“去找牧之原翔子吧,一切因她而始,也必定一切因她而終。”
時間的流動在慢慢的將咲太喚回現實。
“許多失敗了的未來,無法挽回的過去,但是肯定在這之後,會有連接到......”
熟悉的話語再次傳來。但話語的主人已經消失在夜空裏。
每一組數據第一行包含兩個整數n(1<=n<=1e9),Q(Q<=5e4),分別表示數列的長度以及操作的個數。
接下來的Q個數按照操作的時間順序給出每次操作選擇的位置.
......
“你們真的在交往嗎?”
“是的,這是事實。”
櫻島麻衣即使有點不好意思,也依然坦誠真相。
“對方是個沒神經的男生,三個月前向著全校學生向我表白。那個......”,麻衣以害羞的表情慎選言辭“我雖然一度保留,但還是被他的毅力折服了。”
記者們一連串的發問都被櫻島麻衣輕松的化解,明明是新電影發布會的現場,可是記者們對櫻島麻衣的發問卻沒有平息的征兆。
在一旁看著的經紀人——涼子小姐心有余悸。明星的戀愛一直是禁忌的話題,稍有差池就會斷送藝人生涯。但是眼前的櫻島麻衣卻能借助發布會的現場,把氣氛往有利於自己的方向發展。
這自然和櫻島麻衣本身超高的交流技巧有關,還和觀眾有關。
“如果有話要對男朋友說,可以請您在這裏說嗎?”提出請求而不是詢問的記者是南條文香,和梓川咲太認識,一直在追蹤調查“青春期癥候群”。
“不要,我要當面和他說。”櫻島麻衣難為情的笑了,那是有點害羞又有非常幸福,能烙印在靈魂深處的表情,她以這樣一句話作為話題的結束。
發布會後,涼子小姐看到事情的局面發展如此順利,想起了那天晚上櫻島麻衣小姐和她的面談。
“對於氣氛的引導”,櫻島麻衣在涼子小姐前正襟危坐“我需要過半數的記者支持我。”
“怎麽界定這個支持呢?”
“記者對於明星戀愛能不能正面的報到,這個是最重要的。你的電腦裏面也有關於記者的各種資料吧。拿來給我看一下。”
櫻島麻衣接過涼子小姐的電腦,熟練的打開excel,進行了一番操作以後,又把電腦給了涼子小姐。
“每個記者都有{00,10,01,11}四個數字其中的一個,還有一個數字,指的是這個記者的影響力。”
“兩個觀念A和B,0代表不支持,1代表支持。南條文香記者的右邊是11,表示的是即支持A又支持B。而這個記者的右邊是01,說明不支持A但支持B。00的話說明兩個都不支持。”
“涼子小姐,你能不能幫我建立這個一個名單,人數不限,這上面的記者既有超過半數的人支持A,又有超過半數的人支持B。而且這個名單的人的總影響力最大?”
涼子小姐開始打開Visual Studio 2017。她知道這個問題只能用程序來解決,也將決定櫻島麻衣的藝人生涯。
第一行一個整數n,表示有n個記者(1<=n<=400000)
接下來n行,每行有兩個數。
第一個數是{00,01,10,11}的其中一個,表示第i個記者的支持取向。
第二個數是ai (0<=ai<5000),表示第i個記者的影響力。
所有測試數據的n的和不超過500000
出了一道原題,我明確地知道這道題在哪,但我沒寫,也不會寫,真是自閉。
以後在考場上出現這種題,我就,我就不買衣服,不喝奶茶一個月。說到做到!
題目出得真的很跳戲,不過我喜歡。
把所有的謊言獻給你β
Description
梓川咲太的面前坐著野兔先輩,作為約定,只好乖乖的打開筆記本開始學習了。“加法符號寫歪了,變成了乘法符號,在算式的第三行那個地方。”櫻島麻衣突然開口。
心領神會的梓川咲太立刻發現自己正在寫的題目的錯誤,乖乖的改正了以後卻心不在焉。
畢竟,梓川咲太的眼神卻很不老實,畢竟,眼前坐著野兔先輩。
“咲太,假設我給你一個正整數n,你是不是可以把它用許多不同的整數(包括它自己)去減然後把n變成0?”
櫻島麻衣開始穿上披風。
這是生氣的前兆,即將沒了眼福的梓川咲太只能不停的點了點頭。
“那行,一個正整數n的做減法的操作過程也有很多種,比如說6就能變成6-6=0,6-1-5=0和6-2-4=0,對吧。但是不能變成6-3-3=0,因為3重復了。”
櫻島麻衣用漂亮的字體在筆記本上書寫。
“當然寫成6=6,6=1+5,6=2+4更好,相當於這些正整數構成一個序列{a1,a2,...,an}滿足(Σai = N),(n >= 1),且這些正整數互不相同。”
“那麽剛剛的例子就是{6},{1,5},{2,4}這樣。”
“有沒有想過把這些序列的數字乘起來呢?就像加法符號變成乘法一樣,結果就是6,1x5,2x4這樣......“
”就把這樣操作後的結果稱為M吧,對於一個正整數n,不同的拆分能得出不同的M,但M也是有最大值和最小值的。比如說剛剛那個例子,M的最大值是8,最小值是5。”
此時的梓川咲太還不知道即將到來的地獄。
“你剛剛的眼神這麽不老實,大概看了幾十下了吧。我就大發慈悲的寫一些數字,你給我馬上寫出每個數字經過操作以後得出來的M的最小值和最大值。”
“不把這些寫完,今晚不讓你睡哦。”
麻衣打開的筆記本上密密麻麻的排列著許多數字,野兔先輩的代價實在是太大了,不過約定就是約定......
Input
每組樣例,輸入一個正整數N(1<=N<=200)
Output
輸出總共T行,
每行輸出兩個整數,表示每個數字經過操作以後得出的數字M的最小值和最大值,用一個空格隔開
Examples
Input
2 3 6Output
2 3 5 8正確解法:
據說是暴搜找規律,寫了兩天暴搜,但這種新題型暴搜還不是很熟。
真的是代碼量多了不會寫,代碼少了考思維也不會。太難過了。
暴搜:
1 #include<bits/stdc++.h> 2 using namespaceView Codestd; 3 #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); 4 #define LL long long 5 #define ULL unsigned LL 6 #define fi first 7 #define se second 8 #define pb push_back 9 #define lson l,m,rt<<1 10 #define rson m+1,r,rt<<1|1 11 #define lch(x) tr[x].son[0] 12#define rch(x) tr[x].son[1] 13 #define max3(a,b,c) max(a,max(b,c)) 14 #define min3(a,b,c) min(a,min(b,c)) 15 typedef pair<int,int> pll; 16 const int inf = 0x3f3f3f3f; 17 const LL INF = 0x3f3f3f3f3f3f3f3f; 18 const LL mod = (int)1e9+7; 19 const int N = 5e5 + 100; 20 int sta[N]; 21 int Max, gg; 22 void dfs(int b, int l, int lt, int cnt){ 23 if(lt == 0){ 24 Max = max(Max, l); 25 if(gg == l){ 26 for(int i = 1; i < cnt; ++i) 27 cout << sta[i] << ‘ ‘; 28 cout << endl; 29 } 30 } 31 for(int i = b; i <= lt; ++i){ 32 sta[cnt] = i; 33 dfs(i+1, l*i, lt-i, cnt+1); 34 } 35 } 36 int main(){ 37 int n; 38 while(cin >> n){ 39 gg = -1; 40 Max = 0; 41 dfs(1, 1, n, 1); 42 gg = Max; 43 dfs(1, 1, n, 1); 44 } 45 return 0; 46 }
正解:
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); 4 #define LL long long 5 #define ULL unsigned LL 6 #define fi first 7 #define se second 8 #define pb push_back 9 #define lson l,m,rt<<1 10 #define rson m+1,r,rt<<1|1 11 #define lch(x) tr[x].son[0] 12 #define rch(x) tr[x].son[1] 13 #define max3(a,b,c) max(a,max(b,c)) 14 #define min3(a,b,c) min(a,min(b,c)) 15 typedef pair<int,int> pll; 16 const int inf = 0x3f3f3f3f; 17 const LL INF = 0x3f3f3f3f3f3f3f3f; 18 const LL mod = (int)1e9+7; 19 const int N = 1e5 + 100; 20 LL Min[N], Max[N]; 21 vector<int> v; 22 void init(){ 23 v.pb(2); v.pb(3); 24 for(int i = 6; i <= 200; ++i){ 25 int t = v.size(); 26 if(v[0] != 2 && v[t-1] == v[t-2]+1) 27 ++v[t-1]; 28 else if(v[0] != 2){ 29 --v[t-1]; 30 v.insert(v.begin(), 2); 31 } 32 else { 33 int f = 1; 34 for(int i = t-2; i >= 0; i--){ 35 if(v[i]+1 != v[i+1]){ 36 ++v[i]; 37 f = 0; 38 break; 39 } 40 } 41 if(f) ++v[t-1]; 42 } 43 Min[i] = i-1; 44 Max[i] = 1; 45 for(int x : v){ 46 Max[i] *= x; 47 } 48 } 49 } 50 vector<int> vc; 51 int main(){ 52 int T, n; 53 scanf("%d", &T); 54 init(); 55 Min[1] = Max[1] = 1; 56 Min[2] = Max[2] = 2; 57 Min[3] = 2; Max[3] = 3; 58 Min[4] = 3; Max[4] = 4; 59 Min[5] = 4; Max[5] = 6; 60 while(T--){ 61 scanf("%d", &n); 62 printf("%lld %lld\n", Min[n], Max[n]); 63 } 64 return 0; 65 }View Code
暴搜看懂了,會寫了,但正解還沒有看懂。
以行走般的速度β
Description
今天的理科實驗室依舊回響著氣泡的大合唱。梓川咲太一邊看應考的題目一邊聽著聲音的變化,同時思索該如何回答考察數學思維的題目......
就算解決了牧之原翔子和櫻島麻衣的問題,也終究要面對現實的考驗。
“梓川你不是要和櫻島麻衣前輩考同一個大學嗎?”
雙葉理央坐在咲太的面前,今天也依然披著白大褂,正在準備不知名的實驗。
“是啊。之前不是說過嗎?所以我現在忙於備考。”
“我就友善的提醒你一句...”
“什麽?”
“你看的是我的算法競賽書......”雙葉理央用略帶擔憂的聲音這麽說著。
梓川咲太突然回過神來,他翻了翻書本後面的內容,的確是和程序有關。但是前面的例題部分做的卻和普通的參考書別無二致。
雙葉拿回了她的算法書,找著梓川剛剛在看的部分。
“給出一個大於等於2的正整數n,對於一對數a和b(2<=|a|,|b|<=n,a!=b),如果存在一個整數x(|x|>=1)使得ax=b(或bx=a),就可以將a轉換成b(或將b轉換為a),轉換後,你可以獲得|x|的積分。”
一邊說著,雙葉就開始在黑板上寫一些算式。
“不過,限制條件是,轉換完畢後,就不能再使用由a轉換成b或b轉換成a的轉換方式了。“
”一開始擁有的積分是0,現在給一個大於等於2的正數n,可以在2~n都取一次起點進行轉換(更換起點時,轉換方式不初始化)。請問最多可以獲得多少分?”
“雙葉老師,我實在是聽不懂。”
梓川咲太很爽快的袒露了事實。
“
比如說n等於4的時候答案是11,因為
取起點為2時,你的最多得分是9。其中的一種得分方式是 2→(-2)→4→2→(-4)→(-2);
取起點為3時,你只能得1分,3→(-3);
取起點為4時,你別的轉換方式都使用過,因此只能得1分,4→(-4)。
所以最終答案是9+1+1=11,明白了嗎?
”
黑板上已經密密麻麻寫了一堆公式,在右下角又寫了一個Accepted。看來雙葉理央已經在腦內解決了這個問題。
不過對於咲太來說這依舊是一個難題。雖然不是應考的範圍,但既然看了這麽久,也就順便解答出來吧。
Input
多組輸入輸出。對於每一組數據,輸入一個整數n(2<=n<=100000)
保證n的個數小於200,n的總和不超過5000000
Output
對於每一組樣例
輸出梓川咲太最大能夠得到的分數
Examples
Input
2 4 6Output
1 11 33正確解法:
挖坑了qaq
好吧還是沒懂。
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); 4 #define LL long long 5 #define ULL unsigned LL 6 #define fi first 7 #define se second 8 #define pb push_back 9 #define lson l,m,rt<<1 10 #define rson m+1,r,rt<<1|1 11 #define lch(x) tr[x].son[0] 12 #define rch(x) tr[x].son[1] 13 #define max3(a,b,c) max(a,max(b,c)) 14 #define min3(a,b,c) min(a,min(b,c)) 15 typedef pair<int,int> pll; 16 const int inf = 0x3f3f3f3f; 17 const LL INF = 0x3f3f3f3f3f3f3f3f; 18 const LL mod = (int)1e9+7; 19 const int N = 1e5 + 100; 20 int vis[N]; 21 void init(){ 22 for(int i = 2; i < N; ++i){ 23 for(int j = i+i, t = 2; j < N; j+=i, t++){ 24 vis[j] += t; 25 } 26 } 27 } 28 int main(){ 29 init(); 30 int n; 31 while(~scanf("%d", &n)){ 32 LL sum = 0; 33 for(int i = 2; i <= n; ++i){ 34 sum += vis[i]; 35 } 36 printf("%lld\n", sum*4+n-1); 37 } 38 return 0; 39 }View Code
灰暗而空虛的景色β
Description
“雪啊。”“雪是紅色的。”
像壞掉的復讀機一樣,梓川咲太只能把閃爍的思緒斷斷續續的說出來。
“這,是夢吧。”
從口中滑出的卻是這樣的話。
回過神的時候,天空即將被冰冷黑暗的天空吞沒,而自己已經站在湘南臺站附近的圖書館的門口。那是第一次遇見櫻島麻衣的地方,是一切的開端。
無所謂了,已經沒有可以稱為家而能回去的地方了。就在梓川咲太開始自暴自棄的躺在地上任由黑暗吞噬的時候。
眼前突然出現了穿著白大褂的年輕女子,在昏暗的路燈下,隨風飄揚的似乎是紅色的秀發。
“不要去輕易的改變過去。”開口便是這麽難懂的話。
“打個比方,對於一個長度為n,所有元素都為0的數列。每次操作都選取一個位置,使得從這個位置往後都變成1,4,9,16...i^2 ”
“不可思議啊,為什麽我一直在,為什麽你們,一直在讓我做這種數學題。”梓川咲太快瀕臨崩潰了。
“為了拯救櫻島麻衣和牧之原翔子。這樣的理由夠充分嗎?”那位女子的一句話,讓咲太的精神從深海下看到一束光。
“你能計算出經過這麽多次操作以後變得面目全非的數列的和嗎?”
“不可隨便改變過去,就剛才那個比方來說,如果有很多次這樣的操作,那麽這個數列的和也很難計算吧。”
“可你現在就是面臨這個問題哦。計算出那個數列的和,你一定能夠知道答案。”這是只有擁有確信的心的人才能說出來的話。
“算出來以後呢。”梓川咲太還需要最後一塊拼圖。
“去找牧之原翔子吧,一切因她而始,也必定一切因她而終。”
時間的流動在慢慢的將咲太喚回現實。
“許多失敗了的未來,無法挽回的過去,但是肯定在這之後,會有連接到......”
熟悉的話語再次傳來。但話語的主人已經消失在夜空裏。
Input
第一行輸入一個數字T(T<=10)表示數據有多少組;每一組數據第一行包含兩個整數n(1<=n<=1e9),Q(Q<=5e4),分別表示數列的長度以及操作的個數。
接下來的Q個數按照操作的時間順序給出每次操作選擇的位置.
Output
輸出一個數字表示這個數列的和,由於答案可能很大,所以你需要將答案mod 123456789。
Examples
Input
1 3 2 3 1Output
14正確解法:
想出來了,應該是那種堆的感覺。大於的話就加在後面,小於的話就代替前面的。
最後就是爆 long long 了,不知道怎麽做了。
(int128是什麽,為什麽我的兩個編輯器都不能用!)
自我感覺良好,但是wa了的code:
1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<map> 6 #include<algorithm> 7 #include<cmath> 8 using namespace std; 9 int c[501000], kk = 0; 10 int main() 11 { 12 int t; 13 cin >> t; 14 while (t--) 15 { 16 int n, m,b; 17 cin >> n >> m; 18 cin >> b; 19 c[++kk] = b; 20 for (int i = 2; i <= m; i++) 21 { 22 cin >> b; 23 if (b > c[kk]) 24 c[++kk] = b; 25 else 26 { 27 int tt = lower_bound(c+1,c+kk+1,b)-c; 28 c[tt] = b; 29 kk = tt; 30 } 31 } 32 int ans = 0; 33 for (int i = 2; i <= kk; i++) 34 { 35 int tt = c[i] - c[i - 1]; 36 tt = (tt * (tt + 1) % 123456789 * (2 * tt +1))/6% 123456789; 37 ans += tt; 38 ans = ans % 123456789; 39 } 40 int tt = n - c[kk] + 1; 41 tt = (tt * (tt + 1)% 123456789 * (2 * tt + 1)%123456789 )/6% 123456789; 42 ans += tt; 43 cout << ans%123456789 << endl; 44 } 45 46 return 0; 47 }View Code
xk大佬ac的code:
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); 4 #define LL long long 5 #define ULL unsigned LL 6 #define fi first 7 #define se second 8 #define pb push_back 9 #define lson l,m,rt<<1 10 #define rson m+1,r,rt<<1|1 11 #define lch(x) tr[x].son[0] 12 #define rch(x) tr[x].son[1] 13 #define max3(a,b,c) max(a,max(b,c)) 14 #define min3(a,b,c) min(a,min(b,c)) 15 typedef pair<int,int> pll; 16 const int inf = 0x3f3f3f3f; 17 const LL INF = 0x3f3f3f3f3f3f3f3f; 18 const LL mod = 123456789; 19 const int N = 1e5 + 100; 20 int T; 21 int a[N]; 22 LL cal(int x){ 23 __int128 v = x; 24 v = v * (v+1) * (v*2+1)/6; 25 v %= mod; 26 return v; 27 } 28 int main(){ 29 scanf("%d", &T); 30 while(T--){ 31 int n, m; 32 scanf("%d%d", &n, &m); 33 LL ans = 0; 34 for(int i = 1; i <= m; ++i) 35 scanf("%d", &a[i]); 36 int lat = n+1; 37 for(int i = m; i >= 1; --i){ 38 if(lat <= a[i]) continue; 39 ans += cal(lat-a[i]); 40 ans %= mod; 41 lat = a[i]; 42 } 43 ans = (ans%mod)+mod; 44 ans %= mod; 45 printf("%lld\n", ans); 46 } 47 return 0; 48 }View Code
Complex Congratulation β
Description
梓川咲太在解決了櫻島麻衣和豐浜和花互換身體的事件以後,又陷入到了新的麻煩裏面。......
“你們真的在交往嗎?”
“是的,這是事實。”
櫻島麻衣即使有點不好意思,也依然坦誠真相。
“對方是個沒神經的男生,三個月前向著全校學生向我表白。那個......”,麻衣以害羞的表情慎選言辭“我雖然一度保留,但還是被他的毅力折服了。”
記者們一連串的發問都被櫻島麻衣輕松的化解,明明是新電影發布會的現場,可是記者們對櫻島麻衣的發問卻沒有平息的征兆。
在一旁看著的經紀人——涼子小姐心有余悸。明星的戀愛一直是禁忌的話題,稍有差池就會斷送藝人生涯。但是眼前的櫻島麻衣卻能借助發布會的現場,把氣氛往有利於自己的方向發展。
這自然和櫻島麻衣本身超高的交流技巧有關,還和觀眾有關。
“如果有話要對男朋友說,可以請您在這裏說嗎?”提出請求而不是詢問的記者是南條文香,和梓川咲太認識,一直在追蹤調查“青春期癥候群”。
“不要,我要當面和他說。”櫻島麻衣難為情的笑了,那是有點害羞又有非常幸福,能烙印在靈魂深處的表情,她以這樣一句話作為話題的結束。
發布會後,涼子小姐看到事情的局面發展如此順利,想起了那天晚上櫻島麻衣小姐和她的面談。
“對於氣氛的引導”,櫻島麻衣在涼子小姐前正襟危坐“我需要過半數的記者支持我。”
“怎麽界定這個支持呢?”
“記者對於明星戀愛能不能正面的報到,這個是最重要的。你的電腦裏面也有關於記者的各種資料吧。拿來給我看一下。”
櫻島麻衣接過涼子小姐的電腦,熟練的打開excel,進行了一番操作以後,又把電腦給了涼子小姐。
“每個記者都有{00,10,01,11}四個數字其中的一個,還有一個數字,指的是這個記者的影響力。”
“兩個觀念A和B,0代表不支持,1代表支持。南條文香記者的右邊是11,表示的是即支持A又支持B。而這個記者的右邊是01,說明不支持A但支持B。00的話說明兩個都不支持。”
“涼子小姐,你能不能幫我建立這個一個名單,人數不限,這上面的記者既有超過半數的人支持A,又有超過半數的人支持B。而且這個名單的人的總影響力最大?”
涼子小姐開始打開Visual Studio 2017。她知道這個問題只能用程序來解決,也將決定櫻島麻衣的藝人生涯。
Input
多組輸入輸出第一行一個整數n,表示有n個記者(1<=n<=400000)
接下來n行,每行有兩個數。
第一個數是{00,01,10,11}的其中一個,表示第i個記者的支持取向。
第二個數是ai (0<=ai<5000),表示第i個記者的影響力。
所有測試數據的n的和不超過500000
Output
輸出一個數字,表示能取得的最大的總影響力
Examples
Input
5 11 1 01 1 00 100 10 1 01 1Output
103正確解法:
四種類型的排序。
原本wa的是因為,11都可以跟01/10/00都可以配。而我以為11只能跟00配對。
1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<map> 6 #include<algorithm> 7 #include<cmath> 8 using namespace std; 9 int n, a[400100], b[400100], c[400100], d[400100], kk; 10 int k1 = 0, k2 = 0, k3 = 0, k4 = 0; 11 char s[5]; 12 bool cmp(int a, int b) 13 { 14 return a > b; 15 } 16 int main() 17 { 18 while (cin >> n) 19 { 20 memset(a, 0, sizeof(a)); 21 memset(b, 0, sizeof(b)); 22 memset(c, 0, sizeof(c)); 23 memset(d, 0, sizeof(d)); 24 k1 = 0; k2 = 0; 25 k3 = 0; k4 = 0; 26 for (int i = 1; i <= n; i++) 27 { 28 cin >> s; 29 cin >> kk; 30 if (s[0] == ‘1‘&&s[1] == ‘0‘) a[++k1] = kk; 31 else if (s[0] == ‘0‘&&s[1] == ‘1‘) b[++k2] = kk; 32 else if (s[0] == ‘0‘&&s[1] == ‘0‘) c[++k3] = kk; 33 else if (s[0] == ‘1‘&&s[1] == ‘1‘) d[++k4] = kk; 34 } 35 sort(a + 1, a + k1 + 1, cmp); 36 sort(b + 1, b + k2 + 1, cmp); 37 sort(c + 1, c + k3 + 1, cmp); 38 sort(d + 1, d + k4 + 1, cmp); 39 int ans = 0; 40 for (int i =1; i<=k4; i++) 41 ans += d[i]; 42 for (int i = 1; i <= min(k1, k2); i++) 43 ans += a[i] + b[i]; 44 //cout << ans << endl; 45 if (k1 > k2) 46 { 47 int tt = 0; 48 int xa = min(k1, k2) + 1, xc = 1; 49 while (tt <k4) 50 { 51 tt++; 52 if (a[xa] > c[xc]) 53 { 54 ans += a[xa]; 55 xa++; 56 } 57 else 58 { 59 ans += c[xc]; 60 xc++; 61 } 62 } 63 } 64 else 65 { 66 int tt = 0; 67 int xb = min(k1, k2) + 1, xc = 1; 68 while (tt < k4) 69 { 70 tt++; 71 if (b[xb] > c[xc]) 72 { 73 ans += b[xb]; 74 xb++; 75 } 76 else 77 { 78 ans += c[xc]; 79 xc++; 80 } 81 } 82 } 83 cout << ans << endl; 84 } 85 return 0; 86 }View Code
這麽長代碼,比賽時我肯定自己先崩,不過不管那麽多我還是A了。
Test on 12/01/2018