常大新生赛

A:
对于一个较大的整数 N(1<=N<=2,000,000,000)
比如 980364535,我们常常需要一位一位数这个数字是几位数,但是如果在这 个数字每三位加一个逗号,它会变得更加易于朗读。

因此,这个数字加上逗号成如下的模样:980,364,535请写一个程序帮她完成这件事情

代码:

#include<iostream>
#include<stdio.h>
using namespace std;
const int inf=0x3f3f3f3f;
 
int main()
{
    long long n;
    int lala;
    int m[50];
    while(cin>>n)
    {
        if(n<100)
            cout<<n<<endl;
        else
        {lala=1;
        while(n>0)
        {
            m[lala]=n%10;
            n=n/10;
            lala++;
        }
        lala--;
        int f=lala%3;
       // cout<<lala<<endl;
 
        if(f==1)
        {
            cout<<m[lala]<<",";
            lala=lala-1;
        }
        else if(f==2)
        {
            cout<<m[lala]<<m[lala-1]<<",";
            lala=lala-2;
        }
        int num=0;
        for(int i=lala;i>=1;i--)
        {
            cout<<m[i];
            num=num+1;
            if(num==3&&i!=1)
            {
                cout<<",";
                num=0;
            }
        }
        cout<<endl;
        }
    }
    return 0;
 
}

C:水题,结构体排序

在ACM竞赛中,当遇到有两个队伍(人) 解出相同的题目数量的时候,我们需要通过他们解决问题的总时间进行排序。
一共有 N(1<=N<=5,000)条时间被以时(0<=Hours<=99), 分(0<=Minutes<=59),秒(0<=Seconds<=59)的形式记录。
你必须要把他们按时,分,秒排序为 升序,最少的时间最先。 考虑到如下的样例,这三个解出相同题目数量的时间为
11:20:20 
11:15:12 
14:20:14 
正确的排序结果应该是这样的:
 11:15:12
11:20:20 
14:20:14

代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
struct node
{
    int a,b,c;
    bool operator <(const node &other)const   //降序排序
    {
        if(a!=other.a)
        return a<other.a;
        if(b!=other.b)
            return b<other.b;
        return c<other.c;
    }
}lala[5500];
 
int main()
{
    int t;
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        cin>>lala[i].a>>lala[i].b>>lala[i].c;
    }
    sort(lala+1,lala+t+1);
    for(int i=1;i<=t;i++)
    {
        cout<<lala[i].a<<" "<<lala[i].b<<" "<<lala[i].c<<endl;
    }
    return 0;
 
}

J:百度,打表

化学上,同分异构体是一种有相同分子式而有不同的 原子排列的化合物。简单地说,化合物具有相同分子式,但具有不同结构的现象,叫做 同分异构现象
输入一个数n,求n个碳的烷烃(仅由碳、 、碳碳单键与碳氢单键所构成)的同分异构体的数目n=3,4,5如下图所示
代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
 
int main()
{
    int n;
    int a[10];
    a[3]=1;
    a[4]=2;
    a[5]=3;
    a[6]=5;
    a[7]=9;
    a[8]=18;
    a[9]=35;
    while(cin>>n)
    {
        if(n==0||n==1||n==2)
            cout<<1<<endl;
        else
            {
                cout<<a[n]<<endl;
            }
    }
    return 0;
}

B:数学题

萌新AA喜欢对称,最近她喜欢把棋子放进她的棋盘中,这个棋盘是由 N×M 个格 子构成的(1 <= N <= 1,000,000,000;1<=M<=1,000,000,000) 为了保证对称,AA  会以这样的方式摆放她的棋子。她把棋子放在棋盘正中央的方格内, 如果不存在这样的方格,她就会停止。然后她以这个方格为中心把棋盘分成四部分,然后对于每 个小棋盘进行上述的操作。 下面是一个 N=7,M=15 的例子,其中'C'表示棋子

这样子,需要 21个棋子。如果 N=M=5 的话,AA只需要摆放一个棋子,因为分成的四 个小棋盘分别是 2×2 的大小,无法在放进去新的棋子。现在,请你帮助 AA来计算,需要 多少个棋子。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
using namespace std;
const int inf=0x3f3f3f3f;
 
int main()
{
    long long n,m;
    int logal;
    int num;
    int hahaha;
    while(cin>>n>>m)
    {
        int logal=0;
        if(n%2==1&&m%2==1)
        {
            num=1;
            while(1)
            {
                logal+=2;
                n=(n-1)/2;
                m=(m-1)/2;
               // cout<<n<<" "<<m<<endl;
                if(n%2==0||m%2==0)
                    break;
                if(n==1&&m==1)
                    num+=pow(2,logal);
                else if(n==1&&m%2==1)
                    num+=pow(2,logal);
                else if(n%2==1&&m%2==1)
                    num+=pow(2,logal);
                //cout<<"num:"<<num<<endl;
            }
        }
        else
            num=0;
            cout<<num<<endl;
    }
}

E:数学题

已知有一个n+1个数的数列,对于给定的A 0和A n ,当i满足当1<=i<=n-1时有 




现在小星想知道对于这个数列一段区间的和。
代码:
#include<iostream>
using namespace std;
int main()
{
    long long n,A0,An,Q;
    long long xpp1;
    long long xpp2;
    long long l,r;
    cin>>n>>A0>>An>>Q;
    while(Q--)
    {
        cin>>l>>r;
        xpp1=A0+(An-A0)*l/n;
        xpp2=A0+(An-A0)*r/n;
        cout<<(xpp1+xpp2)*(r-l+1)/2<<endl;
 
        //cout<<(long long)((xpp1+xpp2)*((r-l+1)*1.0/2.0))<<endl;
    }
    return 0;
}

D:常州大学组织了 新生寒假训练一共N天,每天训练可以获得的训练效果是Ei。但是如果连续训练超过K天,萌新们会受不了而被劝退。
现在负责人想知道,如何安排能保证萌新不会被劝退并且能获得最大的训练效果。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int n, k, h = 1, t = 0;
long long ans = 0;
long long dp[100007];
long long e[100007];
int q[100007];
int main()
{
    cin >> n >> k;
    for (int i = 1; i <= n; ++i)
    {
        cin >> e[i];
        e[i] += e[i - 1];
    }
    q[++t] = 0;
    for (int i = 1; i <= n + 1; ++i)
    {
        while (h<t&&i - q[h]>k + 1) h++;
        dp[i] = max(dp[i], dp[q[h]] + e[i - 1] - e[q[h]]);
        ans = max(ans, dp[i]);
        while (h <= t&&dp[q[t]] - e[q[t]] <= dp[i] - e[i]) t--; q[++t] = i;
    }
    cout << ans << endl;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值