• Educational Codeforces Round 25


    A题

    分析:遇到1就统计有几个连续的,遇到0若连续的多于一个就输出后面的0

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cstring"
     4 #include "string"
     5 #include "vector"
     6 using namespace std;
     7 int n;
     8 string s;
     9 int main()
    10 {
    11     cin>>n;
    12     cin>>s;
    13     vector<int>p;
    14     for(int i=0;i<n;){
    15         if(s[i]=='0'){
    16             if(i==n-1||s[i+1]=='0'){
    17                 p.push_back(0);
    18             }
    19             i++;
    20         }else{
    21             int cnt=0;
    22             while(i<n&&s[i]=='1'){
    23                 i++;
    24                 cnt++;
    25             }
    26             p.push_back(cnt);
    27         }
    28     }
    29     for(int i=0;i<p.size();i++)
    30         cout<<p[i];
    31     cout<<endl;
    32 }
    View Code

    B题

    分析:直接对每个.位置模拟即可

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cstring"
     4 #include "string"
     5 using namespace std;
     6 const int maxn=20;
     7 string s[maxn];
     8 bool tool(int x,int y){
     9     if(x<0||x>=10||y<0||y>=10)
    10         return false;
    11     return true;
    12 }
    13 bool judge(int x,int y){
    14     //横着的
    15     int cnt=0;
    16     int i,j;
    17     i=x,j=y;
    18     while(s[i][j]=='X'&&tool(i,j)){
    19         i--,cnt++;
    20         if(!tool(i,j)) break;
    21     }
    22     i=x,j=y;
    23     while(s[i][j]=='X'&&tool(i,j)){
    24         i++,cnt++;
    25         if(!tool(i,j))  break;
    26     }
    27     if(cnt-1>=5)   return true;
    28 
    29     //竖着的
    30     cnt=0;
    31     i=x,j=y;
    32     while(s[i][j]=='X'&&tool(i,j)){
    33         j--,cnt++;
    34         if(!tool(i,j))  break;
    35     }
    36     i=x,j=y;
    37     while(s[i][j]=='X'&&tool(i,j)){
    38         j++,cnt++;
    39         if(!tool(i,j))  break;
    40     }
    41     if(cnt-1>=5)  return true;
    42 
    43     //主对角线
    44     cnt=0;
    45     i=x,j=y;
    46     while(s[i][j]=='X'&&tool(i,j)){
    47         i--,j--,cnt++;
    48         if(!tool(i,j))  break;
    49     }
    50     i=x,j=y;
    51     while(s[i][j]=='X'&&tool(i,j)){
    52         i++,j++,cnt++;
    53         if(!tool(i,j))  break;
    54     }
    55     if(cnt-1>=5)  return true;
    56 
    57     //副对角线
    58     cnt=0;
    59     i=x,j=y;
    60     while(s[i][j]=='X'&&tool(i,j)){
    61         i++,j--,cnt++;
    62         if(!tool(i,j))  break;
    63     }
    64     i=x,j=y;
    65     while(s[i][j]=='X'&&tool(i,j)){
    66         i--,j++,cnt++;
    67         if(!tool(i,j))  break;
    68     }
    69     if(cnt-1>=5)   return true;
    70     return false;
    71 }
    72 int main()
    73 {
    74     for(int i=0;i<10;i++)
    75         cin>>s[i];
    76     int flag=0;
    77     for(int i=0;i<10;i++){
    78         for(int j=0;j<10;j++){
    79             if(s[i][j]=='.'){
    80                 s[i][j]='X';
    81                 if(judge(i,j)){
    82                     flag=1; break;
    83                 }
    84                 s[i][j]='.';
    85             }
    86         }
    87         if(flag)  break;
    88     }
    89     if(flag)   cout<<"YES"<<endl;
    90     else  cout<<"NO"<<endl;
    91 }
    View Code

    C题

    分析:先按照从小到大排序,在看看序列中比k大2倍的数当中有多少个后一个比前一个的2倍还多

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cstring"
     4 #include "string"
     5 #include "algorithm"
     6 using namespace std;
     7 const int maxn=1000+10;
     8 int n;
     9 long long k,a[maxn];
    10 int main()
    11 {
    12     cin>>n>>k;
    13     for(int i=0;i<n;i++){
    14         cin>>a[i];
    15     }
    16     sort(a,a+n);
    17     long long res=k;
    18     int cnt=0;
    19     for(int i=0;i<n;i++){
    20         if(a[i]<=2*res){
    21             if(a[i]>res){
    22                 res=a[i];
    23             }
    24         }else{
    25             while(2*res<a[i]){
    26                 res*=2;
    27                 cnt++;
    28             }
    29             if(a[i]>res){
    30                 res=a[i];
    31             }
    32         }
    33     }
    34     cout<<cnt<<endl;
    35 }
    View Code

     D题

    分析:首先我们二分答案,可以得出a最多可以组成多少个b,然后把?位置填上相应缺的字母,多余的填任意字母。

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cstring"
     4 #include "string"
     5 using namespace std;
     6 const int maxn=100;
     7 string a,b;
     8 int visa[maxn],visb[maxn],vis[maxn];
     9 int cnt;
    10 bool judge(int x){
    11     int sum=0;
    12     for(int i=0;i<26;i++){
    13         sum+=visb[i]*x-min(visb[i]*x,visa[i]);
    14     }
    15     if(sum<=cnt)
    16         return true;
    17     return false;
    18 }
    19 int main()
    20 {
    21     cin>>a>>b;
    22     cnt=0;
    23     for(int i=0;i<a.length();i++){
    24         if(a[i]=='?')
    25             cnt++;
    26         else
    27             visa[a[i]-'a']++;
    28     }
    29     for(int i=0;i<b.length();i++)
    30         visb[b[i]-'a']++;
    31     int l=0,r=a.length()/b.length()+1;
    32     while(r-l>1){
    33         int mid=(l+r)/2;
    34         if(judge(mid))  l=mid;
    35         else r=mid;
    36     }
    37     for(int i=0;i<26;i++){
    38         vis[i]=visb[i]*l-min(visb[i]*l,visa[i]);
    39     }
    40     for(int i=0;i<a.length();i++){
    41         if(a[i]=='?'){
    42             a[i]='a';
    43             for(int j=0;j<26;j++){
    44                 if(vis[j]){
    45                     vis[j]--;
    46                     a[i]=j+'a';
    47                     break;
    48                 }
    49             }
    50         }
    51     }
    52     cout<<a<<endl;
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    说一下AOP和IOC的实现原理
    sql 2005 express版本如果安装vs 2010则被sql 2008 express升级代替
    北京热死了
    Webservices,remoting,WCF比较一下
    CGI(拾遗)
    士农工商
    外网无法访问iis服务器
    好好整理了一下胡子
    用IIS在本机虚拟一个域名发布站点(小技巧)
    给目前自己开发的分布式系统做个定义
  • 原文地址:https://www.cnblogs.com/wolf940509/p/7203998.html
Copyright © 2020-2023  润新知