zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 82 (Rated for Div. 2) A-E代码(暂无记录题解)

    A. Erasing Zeroes (模拟)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 1e5+5;
     5 int main(){
     6     int t;cin>>t;
     7     while(t--){
     8         string s;cin>>s;
     9         bool f1 = 0,f2 = 0;
    10         int cnt = 0;
    11         int ans = 0;
    12         for(int i = 0;i<s.length();i++){
    13             if(s[i] == '1'){
    14                 if(f1 == 1) {
    15                     ans+=cnt;
    16                     cnt = 0;
    17                     f1 = 1;
    18                 }
    19                 if(f1 == 0) f1 = 1;
    20             }
    21             else{
    22                 if(f1 == 1) cnt++;
    23             }
    24         }
    25         cout<<ans<<endl;
    26     }
    27     return 0;
    28 }
    View Code

    B. National Project (数学题 周期计算)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 1e5+5;
     5 int main(){
     6     int t;cin>>t;
     7     while(t--){
     8         ll n,g,b;
     9         cin>>n>>g>>b;
    10         ll tn = n;
    11         if(n%2 == 1) n = n/2+1;
    12         else n = n/2;
    13         if(n<=g ) {
    14             cout<<tn<<endl;continue;
    15         }
    16         else{
    17             ll t = g+b;//一个周期 
    18             ll c = n/g;//至少需要几个周期 
    19             if(n%g == 0) {
    20                 if(c*t-b<tn) cout<<tn<<endl;
    21                 else cout<<c*t-b<<endl;
    22                 continue;
    23             }
    24             ll d = n%g;
    25             ll ans = c*t+d;
    26             if(ans<tn) ans+=(tn-ans);
    27             cout<<ans<<endl;
    28             continue;
    29         }
    30         // 4 1 1
    31     }
    32     return 0;
    33 }
    View Code

    C. Perfect Keyboard (dfs 图论)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 struct node{
     4     vector<int> v;
     5 }g[26];
     6 string ans;
     7 int vis[26];
     8 void init(){
     9     for(int i = 0;i<26;i++) g[i].v.clear(),vis[i] = 0;
    10     ans = ""; 
    11 }
    12 void dfs(int cur){
    13     vis[cur] = 1,ans+='a'+cur;
    14     for(int i = 0;i<g[cur].v.size();i++){
    15         if(!vis[g[cur].v[i]]) dfs(g[cur].v[i]);
    16     }
    17 }
    18 void solve(){
    19     string s;
    20     cin>>s;
    21     init();
    22     map<pair<int,int>,int > m;
    23     for(int i = 1;i<s.length();i++){
    24         int a = s[i-1] - 'a',b = s[i] - 'a';
    25         if(a<b) swap(a,b);
    26         if(m[{a,b}] == 0){
    27              m[{a,b}] = 1;
    28              g[a].v.push_back(b);
    29              g[b].v.push_back(a);
    30         }
    31     }
    32     for(int i = 0;i<26;i++){
    33         if(g[i].v.size()>2) {
    34              cout<<"NO"<<endl;
    35              return;
    36         }
    37     }
    38     for(int i = 0;i<26;i++){
    39         if(!vis[i] && g[i].v.size()<2){
    40             dfs(i);
    41         }
    42     }
    43     if(ans.length() == 26) {
    44         cout<<"YES"<<endl;
    45         cout<<ans<<endl;
    46         return;
    47     }
    48     else{
    49         cout<<"NO"<<endl;
    50     }
    51 }
    52 int main(){
    53     int t;
    54     cin>>t;
    55     while(t--){
    56         solve();
    57     }
    58     return 0;
    59 }
    View Code

    D. Fill The Bag(贪心 二进制位运算 状态压缩)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 1e5+5;
     5 const int maxBit = 62;
     6 int cnt[maxBit];
     7 void solve(){
     8     ll n;int m;
     9     scanf("%lld%d",&n,&m);
    10     memset(cnt,0,sizeof(cnt));
    11     ll sum = 0;
    12     for(int i = 1;i<=m;i++) {
    13         ll x;
    14         scanf("%lld",&x);
    15         sum+=x;
    16         for(int j = 0;j<=maxBit;j++){
    17             if((x>>j)&1 == 1) {
    18                 cnt[j+1]++;
    19                 break;
    20             }
    21         } 
    22     }
    23     if(sum<n) {
    24         cout<<-1<<endl;return ;
    25     }
    26     int ans = 0;
    27     for(int i = 1;i<=maxBit;i++){
    28         if((n>>(i-1))&1){
    29             if(!cnt[i]){
    30                 int indx = -1;
    31                 for(int j = i;j<=maxBit;j++){
    32                     if(cnt[j]) {
    33                         indx = j;
    34                         break;
    35                     }
    36                 }
    37                 while(indx!=i){
    38                     cnt[indx]--,cnt[indx-1]+=2,ans++,indx--;
    39                 }
    40 //                n^=(1<<(i-1));            
    41             }
    42             cnt[i]--;
    43         }
    44         cnt[i+1] += cnt[i]/2;
    45     }
    46     cout<<ans<<endl;
    47 }
    48 //
    49 int main(){
    50     int t;
    51     cin>>t;
    52     while(t--){
    53         solve();
    54     }
    55     return 0;
    56 } 
    View Code

    E. Erase Subsequences (字符串上dp)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 405;
     4 int dp[maxn][maxn];
     5 bool check(string s,string t){
     6     int indx = 0;
     7     for(int i = 0;i<s.length();i++){
     8         if(t[indx] == s[i]) indx++;
     9     }
    10     if(indx == t.length()) return true;
    11     return false;
    12 }
    13 bool check(string s,string t1,string t2){
    14     memset(dp,-1,sizeof(dp));
    15     dp[0][0] = 0;
    16     for(int i = 0;i<s.length();i++){
    17         for(int j = 0;j<=t1.size();j++){
    18             if(dp[i][j]<0) continue;
    19             if(j<t1.size() && s[i] == t1[j]){
    20                 dp[i+1][j+1] = max(dp[i+1][j+1],dp[i][j]);
    21             }
    22             if(dp[i][j]<t2.size() && s[i] == t2[dp[i][j]]){
    23                 dp[i+1][j] = max(dp[i+1][j],dp[i][j]+1);
    24             }
    25             dp[i+1][j] = max(dp[i+1][j],dp[i][j]);
    26         }
    27     }
    28     if(dp[s.length()][t1.length()] == t2.length()) return true;
    29     return false;
    30 }
    31 void solve(){
    32     string s,t;
    33     cin>>s>>t;
    34     if(check(s,t)){
    35         cout<<"YES"<<endl;
    36         return;
    37     }
    38     for(int i = 0;i<t.length()-1;i++){
    39         string t1 = t.substr(0,i+1);
    40         string t2 = t.substr(i+1,t.size());
    41         if(check(s,t1,t2)){
    42             cout<<"YES"<<endl;
    43             return;
    44         }
    45     }
    46     cout<<"NO"<<endl;
    47     return;
    48 }
    49 int main(){
    50     int t;
    51     cin>>t;
    52     while(t--){
    53         solve();
    54     }
    55     return 0;
    56 }
    View Code
  • 相关阅读:
    Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    用户画像——“打标签”
    python replace函数替换无效问题
    python向mysql插入数据一直报TypeError: must be real number,not str
    《亿级用户下的新浪微博平台架构》读后感
    【2-10】标准 2 维表问题
    【2-8】集合划分问题(给定要分成几个集合)
    【2-7】集合划分问题
    【2-6】排列的字典序问题
    【2-5】有重复元素的排列问题
  • 原文地址:https://www.cnblogs.com/AaronChang/p/12357756.html
Copyright © 2011-2022 走看看