zoukankan      html  css  js  c++  java
  • 2019中山大学程序设计竞赛

    solved 5

    rank 2

    5道签到比谁签的快?

    A

    unsolved

    B

    题意:给出n条木棍,问是否能组成至少一个三角形。

    按长度排序后只需要检查A(i)+A(i+1)>A(i+2)是否成立,这样O(nlogn)理论上可以通过,但实际时限卡的比较紧会TLE。考虑不能构成三角形时,木棍的长度至少按斐波那契数列的速度增长,很快就会超出int范围,那么可以肯定n较大一定可以形成三角形,这样时间复杂度为O(n)(读入数据),但是可以通过。

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,n) for(int i=1;i<=n;i++)
    #define ll long long
    #define st first
    #define nd second 
    #define mp make_pair
    #define pb push_back
    
    
    const int N=1e3+7;
    
    int n,x;
    
    ll a[N];
    
    int main(){
        ios::sync_with_stdio(false);
        while(cin>>n){
            
            if(n>100){
                rep(i,n){
                    cin>>x;
                }
                cout<<"YES"<<'
    ';
                continue;
            }
            rep(i,n)cin>>a[i];
            sort(a+1,a+1+n);
            int f=0;
            rep(i,n-2){
                if(a[i+2]<a[i+1]+a[i]){
                    cout<<"YES"<<'
    ';
                    f=1;             
                    break;
                }
            }
            if(!f)cout<<"NO"<<'
    ';
        }    
    } 
    View Code

    00:21(4A)

    C

    unsolved

    D

    题意:n*m的矩阵,已知有p个矩形,q次询问一个矩形区域是否被之前p个矩形完全覆盖。

    前半部分通过二维差分预处理出每个点被覆盖的次数,覆盖次数大于1的变成1,然后再对01矩阵做二维前缀和,即可O(1)回答询问。卡内存,需要映射一下。

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,n) for(int i=1;i<=n;i++)
    #define ll long long
    #define st first
    #define nd second 
    #define mp make_pair
    #define pb push_back
    
    
    const int N=1e7+7;
    int n,m; 
    int index(int x,int y){
        if(x>n||y>m||!x||!y)return 0;
        return m*(x-1)+y;
    }
    
    int a[N];
    
    
    
    int main(){
        ios::sync_with_stdio(false);
        while(cin>>n>>m){
            rep(i,n)
            rep(j,m)a[index(i,j)]=0;
            int x1,y1,x2,y2;
            
            int p;
            cin>>p;
            rep(i,p){
                cin>>x1>>y1>>x2>>y2;
                a[index(x1,y1)]++;
                a[index(x2+1,y2+1)]++;
                a[index(x1,y2+1)]--;
                a[index(x2+1,y1)]--;
            }
            
            rep(i,n)
                rep(j,m){
                    a[index(i,j)]=a[index(i-1,j)]+a[index(i,j-1)]-a[index(i-1,j-1)]+a[index(i,j)];
                }
            rep(i,n)
                rep(j,m)if(a[index(i,j)])a[index(i,j)]=1;
                
            rep(i,n)
                rep(j,m){
                    a[index(i,j)]=a[index(i-1,j)]+a[index(i,j-1)]-a[index(i-1,j-1)]+a[index(i,j)];
                }
            
            int q;
            cin>>q;
            rep(i,q){
                cin>>x1>>y1>>x2>>y2;
                if(a[index(x2,y2)]-a[index(x1-1,y2)]-a[index(x2,y1-1)]+a[index(x1-1,y1-1)]==(x2-x1+1)*(y2-y1+1))cout<<"YES"<<'
    ';
                else cout<<"NO"<<'
    ';
            } 
            
            
        }
    } 
    View Code

    01:51(3A)

    E

    题意:模拟

    (行末要有空格,输出末不能有空行,见过的最恶心的PE)

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,n) for(int i=1;i<=n;i++)
    #define ll long long
    #define st first
    #define nd second 
    #define mp make_pair
    #define pb push_back
    
    
    const int N=1e5+7;
    
    string s;
    
    int a[N*24];
    
    int main(){
        ios::sync_with_stdio(false);
        cin>>s;
        int l=s.size(),now=1;
        for(int i=0;i<l;i++){
            int res=s[i];
            for(int j=now;j<=now+7;j++){
                if(res&1)a[j]=1;
                res>>=1;
                if(!res)break;
            }
            now+=8;
        }
        now=1;
        rep(i,l/3*4){
            int res=0;
            for(int j=now;j<=now+5;j++){
                res<<=1;
                res+=a[j]; 
                //cout<<res<<endl; 
            }
            now+=6; 
            cout<<res<<" ";
        }
    } 
    View Code

    00:42(3A)

    F

    unsolved

    G

    unsolved

    H

    题意:给出0/1三视图,1表示有东西,0表示没东西,求物体的最大体积。

    三重循环枚举每个点,这个点在三视图上都为1就计入答案。

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,n) for(int i=1;i<=n;i++)
    #define ll long long
    #define st first
    #define nd second 
    #define mp make_pair
    #define pb push_back
    
    
    const int N=1e2+7;
    
    int a[3][N][N];
    
    int main(){
        ios::sync_with_stdio(false);
        int x,y,z;
        while(cin>>x>>y>>z){
            rep(i,x)
                rep(j,y)cin>>a[0][i][j];
            rep(i,y)
                rep(j,z)cin>>a[1][i][j];
            rep(i,z)
                rep(j,x)cin>>a[2][i][j];
            
            
            int ans=0;
            rep(i,x)
            rep(j,y)
            rep(k,z){
                if(a[0][i][j]&&a[1][j][k]&&a[2][k][i])ans++;
            }        
            cout<<ans<<'
    ';
        }
    } 
    View Code

    00:54(1A)

    I

    题意:模拟

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,n) for(int i=0;i<n;i++)
    #define ll long long
    #define st first
    #define nd second 
    #define mp make_pair
    #define pb push_back
    
    
    const int N=1e2+7;
    
    char a[N][N];
    
    int main(){
        int n,m,k;
        while(cin>>n>>m>>k){
            rep(i,n)scanf("%s",a[i]);
            
            rep(i,k*n){
                rep(j,m){
                    rep(w,k)cout<<a[i/k][j];
                }
                cout<<endl;
            }
        }
    } 
    View Code

    00:09(2A)

    J

    unsolved

    K

    unsolved

  • 相关阅读:
    Texture转Texture2D
    虚拟化 -- kvm简介
    虚拟化
    数据库
    openstack共享组件(1)------ NTP 时间同步服务
    openstack
    Linux基础命令
    第七章 Python文件操作
    第六章 Python流程控制
    老吴Python宝典之——Python字典&集合(第五章 )
  • 原文地址:https://www.cnblogs.com/xutianshu/p/10753886.html
Copyright © 2011-2022 走看看