zoukankan      html  css  js  c++  java
  • QFNU-ACM 2021.3.3 Rating 补题/解题报告

    A

    Nlogonia高中一年级有n个学生。校长希望把学生分成两间教室。两个名字以相同字母开头的截然不同的学生如果被放在同一间教室里,他们会很健谈,求最少可能有多少聊天组

    解题思路:计算每个字母开头的有多少人,>=2时,平均分到两组,计算每组与多少的聊天组相加

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    int main()
    {
        int n,i,a[30]={0};
        string s;
        cin>>n;
        for(i=0;i<n;i++){
            cin>>s;
            a[s[0]-'a']++;
        }
        int sum=0;
        for(i=0;i<26;i++){
            if(a[i]>2){
    
                int x=a[i]/2;
                int y=a[i]-x-1;
                x--;
                while(x!=0){
                    sum+=x;
                    x--;
                }
                while(y!=0){
                    sum+=y;
                    y--;
                }
            }
        }
        cout<<sum<<endl;
    
        return 0;
    }

    B

    给你一个k,然后问:是否存在一个矩阵  , n *m = k, 然后每一行都有5个元音字母,每一列也都有一个元音字母。如果有的话输出,没有的话输出-1
    先求出一组n,m,,n,m都>5,循环判断能不能整除k,再求这个矩阵,我是把它分成四块
    右上角5*5的矩阵,左上角,竖着写aeiou,右下角,横着写aeiou,左下角,随便写,再按行输出就行

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    char b[5][5]={'a','e','i','o','u',
                    'e','i','o','u','a',
                    'i','o','u','a','e',
                    'o','u','a','e','i',
                    'u','a','e','i','o',
    };
    char c[5]={'a','e','i','o','u'};
    int main()
    {
        int k;
        cin>>k;
        double x=sqrt(k);
        int m=0,n=0;
        for(int i=int(x+1);i>0;i--){
            if(k%i==0){
                if(i>=5&&((k/i)>=5)){
                    m=i;
                    n=k/i;
                    break;
                }
            }
        }
        if(m==0&&n==0){
            cout<<-1<<endl;
        }else{
            int i,j;
            for(i=0;i<m;i++){
                for(j=0;j<n;j++){
                    if(i<5){
                        if(j<5){
                            cout<<b[i][j];
                        }
                        if(j>=5){
                            cout<<b[i][0];
                        }
                    }else{
                       if(j<5){
                        cout<<c[j];
                       }else{
                       cout<<'a';
                       }
                    }
                }
            }
        }
        return 0;
    }

    C

    给出一组数据,找出其中有多少组(a,b)使|a-b|<|a|,|b|<|a+b|;

    a,b取绝对值,ab,ba为一组

    思路:只需判断a-b是否小于a,b中小的那一个

    a,b不行,a,b+1肯定也不行啦

    #include <cstdlib>
    #include<bits/stdc++.h>
    using namespace std;
    
    int main( )
    {
        int n,i;
        long long sum=0;
        int a[200010];
        cin>>n;
        for(i=0;i<n;i++){
            cin>>a[i];
            a[i]=abs(a[i]);
        }
        sort(a,a+n);
        int z=0,y=1;
        while(z<n&&y<n){
            if(a[y]-a[z]<=a[z]){
                sum+=y-z;
                y++;
                //cout<<sum<<endl;
            }
            else z++;;
        }
        cout<<sum<<endl;
        return 0;
    }
  • 相关阅读:
    C# List的深复制(转)
    asp.net core控制台项目运行
    进度条界面控件
    给窗体做遮罩(另类做法)
    显示列表控件(引用SourceGrid)
    TimeExit 界面无点击定时退出类
    TimeHelp 获取时间戳转换类
    复旦大学2016--2017学年第一学期高等代数I期末考试情况分析
    复旦大学高等代数历届每周一题汇总
    复旦高等代数 I(16级)每周一题
  • 原文地址:https://www.cnblogs.com/a-specter/p/14529993.html
Copyright © 2011-2022 走看看