喵哈哈村的魔法考试 Round #1 (Div.2) 题解源码(A.水+暴力,B.dp+栈)
A.喵哈哈村的魔法石
發布時間: 2017年2月21日 20:05?? 最后更新: 2017年2月21日 20:06?? 時間限制: 1000ms?? 內存限制: 128M
描述傳說喵哈哈村有三種神奇的魔法石:第一種魔法石叫做人鐵石,擁有A的能量;第二種魔法石叫做地岡石,擁有B的能量;而第三種,則是最神奇的天玄石,擁有無可比擬的C的能量!
但是有一天,沈寶寶太調皮了,把一顆天玄石玩丟了……
“這可玩大發了,這樣我會被天行廖責備的。”沈寶寶悲傷的說到,“怎么辦呢?”
這時候沈寶寶望了望窗外的飛過的白鴿,突然急中生智,想到了一個辦法:干脆就用人鐵石和地岡石把天玄石湊出來吧!
“只要我拿若干個人鐵石,若干個地岡石,他們的能量之和,恰好加起來等于天玄石所擁有的能量。然后再把這些石頭粘在一起,那么由若干個石頭的組成的整體,我不就可以看做是一個天玄石了嗎?“
沈寶寶愈發覺得自己機智。
所以現在有一個問題擺在你的面前了,給你A,B,C,請判斷是否存在兩個大于等于0的整數x,y滿足Ax+By=C.
輸入第一行一個T,表示有T組測試數據。
接下來T行,每行三個整數a,b,c,分別表示三塊石頭的能量值。
滿足(1<=T<=100,1?≤?a,?b?≤?100,?1?≤?c?≤?10?000)
對每一組測試答案均需要輸出結果,如果可行的話,輸出Yes,否則輸出No
樣例輸入1?復制2 1 2 3 4 6 15樣例輸出1
Yes No題目鏈接:http://qscoj.cn/problem/10/ 分析:明顯就是一道水+暴力,直接上公式: Ax+By=C-->?x=(C-By)/A; y=(C-Ax)/B; 下面給出AC代碼:
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int a,b,c,n; 6 scanf("%d",&n); 7 while(n--) 8 { 9 scanf("%d%d%d",&a,&b,&c); 10 int flag=0; 11 for(int i=0;i<10000;i++) 12 { 13 if((c-a*i)%b==0&&(c-a*i)/b>=0) 14 { 15 flag=1; 16 break; 17 } 18 } 19 if(flag) 20 printf("Yes\n"); 21 else printf("No\n"); 22 } 23 return 0; 24 }
B.喵哈哈村的括號序列
發布時間: 2017年2月21日 20:05?? 最后更新: 2017年2月21日 20:07?? 時間限制: 1000ms?? 內存限制: 128M
描述喵哈哈村的括號序列和外界的括號序列實際上是一樣的。
眾所周知"()"這樣的,就是一個標準的括號序列;"()()()()"這樣也是括號序列;“((()))()”這樣也是一個合法的括號序列。但是"((("這樣,就不是一個合法的括號序列了。
現在沈寶寶非常好奇,給你一個字符串,請從中找出最長的合法括號序列出來。
不知道你能找到嗎?
輸入第一行一個T,表示有T組數據。
接下來T行,每一行都是一個字符串。
保證字符串的長度小于100000。
而且字符串中保證只會出現"(",")"這兩種字符之一。
1<=T<=10
對于每一組測試數據,輸出最長的合法括號序列的長度。
樣例輸入1?復制2 )((())))(()()) )(樣例輸出1
6 0題目鏈接:http://qscoj.cn/problem/11/ 分析:這是一道棧+dp的綜合運用的題目。如果我們遇到(,那么我們就把這個位置放進棧里面。如果遇到)的話,就pop掉棧頂,且棧頂就是這個)匹配的(位置,如果我們用l[i]來表示與i匹配的左括號位置的話。
那么我們令dp[i]表示以i結尾的括號序列的最長長度的方程為:dp[i]=dp[l[i]-1]+(i-l[i]+1)。
最后在所有的dp里面取個max就好了。
下面給出AC代碼:
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e5+7; 4 string s; 5 stack<int> k; 6 int dp[maxn]; 7 void solve() 8 { 9 memset(dp,0,sizeof(dp)); 10 while(k.size()) 11 k.pop(); 12 cin>>s; 13 for(int i=0;i<s.size();i++) 14 { 15 if(s[i]=='(') 16 k.push(i); 17 else 18 { 19 if(!k.empty()) 20 { 21 dp[i]=i-k.top()+1; 22 if(k.top()>0) 23 dp[i]+=dp[k.top()-1]; 24 k.pop(); 25 } 26 } 27 } 28 int ans=0; 29 for(int i=0;i<s.size();i++) 30 if(dp[i]>ans) 31 ans=dp[i]; 32 cout<<ans<<endl; 33 } 34 int main() 35 { 36 int t; 37 scanf("%d",&t); 38 while(t--) 39 { 40 solve(); 41 } 42 return 0; 43 }
?
轉載于:https://www.cnblogs.com/ECJTUACM-873284962/p/6783695.html
總結
以上是生活随笔為你收集整理的喵哈哈村的魔法考试 Round #1 (Div.2) 题解源码(A.水+暴力,B.dp+栈)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《上巳日恩赐曲江宴会即事》第五句是什么
- 下一篇: ThInkPHP验证码不显示,解决方法汇