• 7.28-个人训练赛第五场


    A题:Make a Rectangle

    输入一组数据表示边的长度,找四条边构成矩形,求这个矩形的最大面积

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 typedef long long ll;
     5 int n,a[100005];
     6 int main()
     7 {
     8     cin>>n;
     9     for(int i=0;i<n;i++)
    10         cin>>a[i];
    11     sort(a,a+n);
    12     ll ans=1;
    13     int cnt,flag=0,j,fflag=0;
    14     for(int i=n-1;i>=0;i--)
    15     {
    16         cnt=1;
    17         for(j=i-1;j>=0;j--)
    18         {
    19             if(a[i]==a[j])
    20             {
    21                 cnt++;
    22             }
    23             else
    24             {
    25                 i=j+1;
    26                 break;
    27             }
    28         }
    29         if(cnt==2||cnt==3)
    30         {
    31             if(flag==2)
    32             {
    33                 cout<<ans<<endl;
    34                 fflag=1;
    35                 break;
    36             }
    37             else if(flag==1){
    38                 ans*=(ll)a[i];
    39                 cout<<ans<<endl;
    40                 fflag=1;
    41                 break;
    42             }
    43             else
    44             {
    45                 ans*=(ll)a[i];
    46                 flag++;
    47             }
    48         }
    49         else if(cnt>=4)
    50         {
    51             if(flag==0)
    52             {
    53                 cout<<(ll)a[i]*a[i]<<endl;
    54                 fflag=1;
    55                 break;
    56             }
    57             else if(flag==1)
    58             {
    59                 ans*=(ll)a[i];
    60                 cout<<ans<<endl;
    61                 fflag=1;
    62                 break;
    63             }
    64         }
    65     }
    66     if(!fflag)
    67         cout<<"0"<<endl;
    68 //    cout << "Hello world!" << endl;
    69     return 0;
    70 }
    View Code

    E题:Coloring Dominoes

    染色问题

    题目已经限制只有两行,因此我们可以遍历一遍,每次都和前面的矩形进行比较。建立一个a[i]数组用来表示当前矩形的状态(a[i]==1表示矩形是竖着的,a[i]==2表示矩形是横着的)

    由于只有三种颜色,经过分析,我们可以得出矩形的排列有四种状态。每个对应的状态乘以它的方法数就行了。

     1 #include <bits/stdc++.h>
     2  
     3 using namespace std;
     4 const int mod=1000000007;
     5 typedef long long ll;
     6 int n,a[100];
     7 string s1,s2;
     8 int main()
     9 {
    10     cin>>n;
    11     cin>>s1>>s2;
    12     ll ans=1,h;
    13     for(int i=0;i<n-1;i++)
    14     {
    15         if(s1[i]==s1[i+1]){
    16             a[i]=2;
    17             a[i+1]=2;
    18             i++;
    19         }
    20         else
    21             a[i]=1;
    22     }
    23     if(a[n-1]==a[n-2])
    24         a[n-1]=2;
    25     else
    26         a[n-1]=1;
    27     if(s1[0]==s1[1])
    28     {
    29         ans*=6;
    30         h=2;
    31     }
    32     else
    33     {
    34         ans*=3;
    35         h=1;
    36     }
    37     for(ll i=h;i<n-1;i++)
    38     {
    39         if(s1[i]==s1[i+1]&&a[i-1]==2)
    40         {
    41             ans=(ans%mod*3)%mod;
    42             i++;
    43         }
    44         else if(s1[i]==s1[i+1]&&a[i-1]==1)
    45         {
    46             ans=(ans%mod*2)%mod;
    47             i++;
    48         }
    49         else if(s1[i]!=s1[i+1]&&a[i-1]==1)
    50         {
    51             ans=(ans%mod*2);
    52         }
    53     }
    54  
    55     if(s1[n-1]!=s1[n-2]&&a[n-2]==1)
    56     {
    57         ans=(ans%mod*2);
    58     }
    59     ans%=mod;
    60     cout<<ans<<endl;
    61 //    cout << "Hello world!" << endl;
    62     return 0;
    63 }
    View Code
    如有错误,请指正,感谢!
  • 相关阅读:
    BOJ 85 Three Points On A Line
    BOJ 84 Single Number
    BOJ 83 A + B Problem
    【转载】运算符优先级
    匹配体重和为特定值的人,两两成对
    The Brand New Beginning!
    【失败】制作CentOS镜像
    【制作镜像】安装VMwareTool
    部署巡检脚本
    windows server 2008镜像重启后密码变为默认密码的问题的解决方案
  • 原文地址:https://www.cnblogs.com/scott527407973/p/9380678.html
Copyright © 2020-2023  润新知