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

猜你喜欢

转载自www.cnblogs.com/scott527407973/p/9380678.html