Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)
A. Single Wildcard Pattern Matching
题目链接:A. Single Wildcard Pattern Matching
题意:给定两个字符串,第一个字符串至多含有一个*,然后可以把*替换成一个任意的字符串,求这两个字符串是否匹配。
思路:首先判断是否含有'*',没有则直接判断两个string是否相等,有则从前到'*'遍历一次,从后到'*'遍历一次,看是否存在不等的字符。
AC代码:
#include <iostream> #include <vector> #include <string> using namespace std; int main (void) { string s,t; int n,m; while(cin>>n>>m) { cin>>s>>t; int arc = 0; for(int i = 0; i < s.size(); i++) if(s[i] == '*') { arc = 1; break; } if(arc == 0) { if(s==t) cout<<"YES"; else cout<<"NO"; } else { if(s.size()-1>t.size()) cout<<"NO"; else { int i = 0; while(s[i]!='*') { if(s[i]!=t[i]) { arc = 2; } i++; } i = 1; while(s[s.size()-i]!='*') { if(s[s.size()-i]!=t[t.size()-i]) { arc = 2; } i++; } if(arc == 1) cout<<"YES"; if(arc == 2) cout<<"NO"; } } } return 0; }
B. Pair of Toys
题目链接:B. Pair of Toys
题意:给你一个数列1-n,给你一个期望值k,让你求用任意数列中两个数得到k的种类有多少。
思路: 分成四种情况讨论即可。
1.k>=2*n,直接GG。
2.n<k<2*n,pair = (k+1)/2
3.n>k,pair = (2n-k+1)/2
4.n==k,如果k是偶数,pair == (k-1)/2;
如果k是奇数,pair == k/2;
AC代码:
#include <iostream> #include <vector> #include <string> using namespace std; int main (void) { long long int n, k; while(cin>>n>>k){ if(n*2<=k) cout<<0; else if(n<k){ long long int min; min = k-n; cout<<(n-min+1)/2; } else if(n>k){ long long int max; max = k-1; cout<<(max/2); } else{ if(k%2==0) cout<<(k-1)/2; else cout<<k/2; } } return 0; }
C. Bracket Subsequence
题意&思路:括号的匹配,栈使用的基本问题。
AC代码:
#include <iostream> #include <vector> #include <string> #include <stack> using namespace std; int main (void) { int n, k; while(cin>>n>>k) { string s; cin>>s; stack<char> stk, stk2; int count = 0; int i = 0; for(i = 0; i < n; i++) { if(s[i] == ')'){ stk.pop(); count = count+2; } else stk.push(s[i]); if(count == n - k) break; } i++; for(;i<n;i++){ stk.push(s[i]); } while(!stk.empty()) { stk2.push(stk.top()); stk.pop(); } while(!stk2.empty()) { cout<<stk2.top(); stk2.pop(); } } return 0; }

浙公网安备 33010602011771号