zoukankan      html  css  js  c++  java
  • 2020.3.14 BAPC 2019 Preliminaries 解题+补题报告

    A Architecture 

     1.题意

      一开始被题意搞晕了,其实就是给定两组数,判断它们的最大值是否相等。

     2.题解

      分别维护两个最大值,判断是否相等。

     3.代码

    #include<bits/stdc++.h>
    using namespace std;
    int m,n;
    int main(){
        cin>>m>>n;
        int x;
        int maxr=0,maxc=0;
        for(int i=1;i<=m;i++){
            cin>>x;
            maxr=max(maxr,x);
        }
        for(int i=1;i<=n;i++){
            cin>>x;
            maxc=max(maxc,x);
        }
        if(maxr==maxc)
            cout<<"possible"<<endl;
        else
            cout<<"impossible"<<endl;    
    
        return 0;
    }

    F.Floor Plan

     1.题意

      给定一个正整数n,求出两个非负整数m、k,使得n=m^2-k^2。(答案不唯一,求出一组m、k即可)

     2.题解
      之前没做过类似的题,慢慢摸索着找到了规律。当n为奇数时,m=(n+1)/2,k=m-1肯定符合题意,输出这一组m、k即可,例:5 3 2 ;当n为偶数且为4的倍数时,m=n/4+1,k=n/4-1符合题意,输出即可,例:8,3,1 。
     3.代码

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 ll n;
     5 int main(){
     6     scanf("%lld",&n);
     7     if(n%4==0){
     8         printf("%lld %lld",n/4+1,n/4-1);
     9         return 0;
    10     }    
    11     if(n%2){
    12         printf("%lld %lld",(n+1)/2,(n+1)/2-1);
    13         return 0;
    14     }
    15 
    16     printf("impossible");
    17     
    18     return 0;
    19 } 

    G Greetings! 

     1.题意

      给定一个字符串,有字符‘e'便双倍输出。

     2.题解

      遍历字符串,遇到’e‘就输出“ee” 。

     3.代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 string s;
     4 int main(){
     5     cin>>s;
     6     for(int i=0;i<s.size();i++){
     7         if(s[i]=='e')
     8             cout<<"ee";
     9         else
    10             cout<<s[i];
    11     }
    12 
    13     return 0;
    14 }

    I Inquiry I 

     1.题意

      给定n个正整数,求下面公式的最大值。

      (a1^2 +a2^2+···+ak^2)·(ak+1+ak+2+···+an)

     2.题解

      求前半部分的前缀和与后半部分的后缀和,遍历维护最大值。

    3.代码

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std; 
     4 ll n,ans;
     5 ll a[1000005],l[1000005],r[1000005];
     6 int main(){
     7     scanf("%d",&n);
     8     for(ll i=1;i<=n;i++) 
     9         scanf("%d",&a[i]);
    10     for(ll i=1;i<=n;i++) 
    11         l[i]=l[i-1]+a[i]*a[i];
    12     for(ll i=n;i>=1;i--) 
    13         r[i]=r[i+1]+a[i];
    14     for(ll i=1;i<n;i++) 
    15         ans=max(ans,l[i]*r[i+1]);
    16     printf("%lld
    ",ans);
    17  
    18     return 0;
    19 }
  • 相关阅读:
    大话重构连载首页
    大话重构连载19:大对象的演化过程
    大话重构连载18:最常见的问题
    大话重构连载17:抽取方法的实践
    大话重构连载16:超级大函数
    大话重构连载15:采用Mock技术完成测试
    大话重构连载14:我们是这样自动化测试的
    大话重构连载13:自动化测试——想说爱你不容易
    大话重构连载12:你不能没有保险索
    大话重构连载11:小步快跑是这样玩的
  • 原文地址:https://www.cnblogs.com/lvguapi/p/12503885.html
Copyright © 2011-2022 走看看