zoukankan      html  css  js  c++  java
  • 南昌大学航天杯第二届部分题解

    这个比赛的题目考的比较多的都是大数运算,或者unsigned long long 的数据范围(1e18以内)。

    首先是a题,签到,只不过是加了英文的描述,大意就是多组数据输入,然后将每组的字符串大写转小写,小写转大写,其他的不管。

    #include <cstdio>
    #include <iostream>
    #include <ctime>
    #include <stdlib.h>
    #include <cstring>
    using namespace std;
     
    int main()
    {
        char s[10000];
        while(~scanf("%s",&s)){
        int len=strlen(s);
        for(int i=0;i<len;i++){
            if(s[i]<='z'&&s[i]>='a') s[i]-=32;
            else if(s[i]<='Z'&&s[i]>='A') s[i]+=32;
        }
        cout<<s<<endl;
        }
        return 0;
    }

    然后是b题,一道简单的博弈题,一开始被题意蒙了一下,其实两堆没什么用,就合并成一堆,然后推了一下,就是分下奇偶数,奇数先手必赢,偶数后手必输。

    #include <cstdio>
    #include <iostream>
    #include <ctime>
    #include <stdlib.h>
    #include <cstring>
    using namespace std;
     
    int main()
    {
        int a,b;
        while(~scanf("%d %d",&a,&b)){
            int sum=a+b;
            if(sum%2==0) cout<<"lose"<<endl;
            else cout<<"win"<<endl;
        }
        return 0;
    }
     

    c题,题目描述相对简单,就是找n个节点的无长度为3的环的简单无向图的最多边

    别人很多都是暴力搜做的,其实可以找规律

    即发现没有长度为3的环的图就是二分图,而完全二分图就是边数最多的。

    引理:n个顶点的图G=(V,E),假设其顶点的最大度数为m,则边数最多为m*(n-m)

    然后发现,当m=floor(n/2)时,当n是偶数时,最多边数就是n/2*n/2,奇数时就是((n-1)/2)*((n+1)/2).

    #include <cstdio>
    #include <iostream>
    #include <ctime>
    #include <stdlib.h>
    #include <cstring>
    using namespace std;
     
    int main()
    {
        int n,m;
        while(~scanf("%d",&n)){
            if(n%2==0) m=(n/2)*(n/2);
            else m=(n-1)/2* (n+1)/2;
            cout<<m<<endl;
        }
        return 0;
    }

    然后就写了i题

    题意就是给你两个数(<10^18),然后求这两数的差值转换成时间的格式即hh :mm :ss的形式

    就是用ull存然后取余,除就分别算出小时,分钟和秒就行了

    #include <cstdio>
    #include <iostream>
    #include <ctime>
    #include <stdlib.h>
    #include <cstring>
    using namespace std;
     
    int main()
    {
        unsigned long long a,b,c;
        unsigned long long n,m;
        while(~scanf("%llu %llu",&n,&m)){
            unsigned long long sum=m-n;
            a=sum/3600;
            sum=sum%3600;
            b=sum/60;
            c=sum%60;
            printf("%02llu:%02llu:%02llu
    ",a,b,c);
        }
        return 0;
    }
  • 相关阅读:
    20165331 第五周学习总结
    第二次测试补做
    20165331 《Java程序设计》第四周学习总结
    2018-2019-1 20165237 《信息安全系统设计基础》第二周学习总结
    2018-2019-1 20165237 《信息安全系统设计基础》第一周学习总结
    20165237 2017-2018-2《Java程序设计》课程总结
    2017-2018-2 20165237 实验五《网络编程与安全》实验报告
    2017-2018-2 20165237 实验四《Android开发基础》实验报告
    20165237 2017-2018-2 《Java程序设计》第十周考试补做及编程题
    2017-2018-2 20165237 实验三《 敏捷开发与XP实践》实验报告
  • 原文地址:https://www.cnblogs.com/maybe96/p/9349299.html
Copyright © 2011-2022 走看看