SNNU 4.4 CCCC

SNNU 4.4 CCCC,第1张

SNNU 4.4 CCCC
  • 1.比赛题目
    • A 大家好
      • 1.题目
      • 2.分析
      • 3.代码
    • B 被鸽了的课本
      • 1.题目
      • 2.分析
      • 3.代码
    • C 学数列
      • 1.题目
      • 2.分析
      • 3.代码
    • D 回文数
      • 1.题目
      • 2.分析
      • 3.代码
    • E Drink
      • 1.题目
      • 2.分析
      • 3.代码
    • F 统计
      • 1.题目
      • 2.分析
      • 3.代码
    • G
      • 1.题目
      • 2.分析
      • 3.代码
    • H
      • 1.题目
      • 2.分析
      • 3.代码
  • 2.比赛总结
  • 3.更新日志

1.比赛题目 A 大家好 1.题目

题目描述
跨界大神 L. Peter Deutsch 有一句名言:“To iterate is human, to recurse divine.”(迭代的是人,递归的是神)。


本题就请你直接在屏幕上输出这句话。


输入描述:

本题没有输入。


输出描述:

在一行中输出 To iterate is human, to recurse divine.。


2.分析

CTRL C/V

3.代码
#include 
using namespace std;
int main()
{
    cout<<"To iterate is human, to recurse divine.";
    return 0;
}
B 被鸽了的课本 1.题目

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述
众所周知你在读高二,高二有必修课本和选修课本。



众所周知你的学校很坑,和商家串通好了来坑害你
众所周知你的学校不帮你买课本(啥玩意)
众所周知你想知道自己买划算还是让学校代购划算

学校刚开通了代购渠道,原价共x元的必修课本和y元的选修课本,如果选择让学校代购可以减免a%a%。


而如果后面自己买,因为选科的问题只需要y/2元。


你想知道是自己买划算还是学校代购划算。


还有,能自己买尽量自己买。


输入描述:

一行三个整数x,y,a

输出描述:

如果学校划算输出"Through school"

否则输出"By myself"

示例1
输入
5 5 1
输出
By myself
说明
自己买花7.5元
通过学校买花费9.9元

2.分析

记得用double类型,防止a/100为0之类的小错误

3.代码
#include 
using namespace std;
int main()
{
    double x,y,a;
    double M,S;
    cin>>x>>y>>a;
    M=x+y/2;
    S=(x+y)*(1-a/100);
    if(M>S)
        cout<<"Through school";
    else
        cout<<"By myself";
    return 0;
}
C 学数列 1.题目

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

牛牛准备继续进阶,计算更难的数列
输入一个整数n,计算 1+1/(1-3)+1/(1-3+5)+…+1/(1-3+5-…((-1)^(n-1))*(2n-1))的值

输入描述:

输入一个整数

输出描述:

输出一个浮点数,保留3位小数

示例1
输入
1
输出
1.000

2.分析

利用循环,依次更新即可

3.代码
#include 
#include 
int main()
{
    double n,Sum=1,Fm=1,Xiang=3,flag=1;
    double i=3;
    scanf("%lf",&n);
    while(i<=(2*n-1))
    {
        flag*=-1;
        Fm+=flag*Xiang;
        Sum+=1/Fm;
        Xiang+=2;
        i+=2;
    }
    printf("%.3lf",Sum);
    return 0;
}
D 回文数 1.题目

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述
今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。


请输出不超过n的回文数。


输入描述:

输入一个整数n(1 <= n <= 100000)

输出描述:

从1开始按从小到大的顺序输出所有回文数

示例1
输入
10
输出
1
2
3
4
5
6
7
8
9

2.分析

回文数可以将整个数字逆序,比较逆序之后的数字和逆序前的数字是否相同

3.代码
#include 
int main()
{
    int n,i=1;
    int Sum=0;
    scanf("%d",&n);
    
    while(i<=n)
    {
        int temp=i;
        Sum=0;
        
        while(temp)       //Sum为逆序后的数字
        {
            Sum=10*Sum+temp%10;
            temp/=10;
        }
        
        if(Sum==i)
            printf("%d\n",i);
        
        i++;
    }
    
    return 0;
}
E Drink 1.题目

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述
小美和小团最近沉迷可乐。


可供TA们选择的可乐共有k种,比如可口可乐、零度可乐等等,每种可乐会带给小美和小团不同的快乐程度。



TA们一共要买n瓶可乐,每种可乐可以买无限多瓶,小美会随机挑选其中的m瓶喝,剩下的n-m瓶小团喝。



请问应该如何购买可乐,使得小美和小团得到的快乐程度的和的期望值最大?
现在请求出购买可乐的方案。




示例1
输入
2 1 2
1 2
3 1
输出
0 2

2.分析 3.代码 F 统计 1.题目

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。


已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。


输入描述:

第1行是整数n,表示自然数的个数。


第2~n+1行每行一个自然数。


输出描述:

输出m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。


每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。


示例1
输入
8
2
4
2
4
5
100
2
100

输出
2 3
4 2
5 1
100 2

2.分析

先将输入的数字sort排序,再记录每个数字出现的次数,最终依次输出即可(可以边计算边输出!!!)

3.代码
#include 
using namespace std;
int main()
{
    int Num[200005];   //存储输入的自然数
    int n;   //记录自然数的个数
    int cnt,temp;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>Num[i];   //存储 
    }
    
    sort(Num,Num+n);
    
    for(int j=0;j<n;j++)
    {
        if(j==0)
        {
            temp=Num[j];
            cnt=1;
        }
        
        else if(temp!=Num[j])
        {
            cout<<temp<<" "<<cnt<<endl;
            temp=Num[j];  //重置temp
            cnt=1;      //重置cnt
        }
        
        else
            cnt++;
    }
    
    cout<<temp<<" "<<cnt;    //输出最后一次的数据
    
    return 0;
}

G 1.题目 2.分析 3.代码

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

输入描述:

第一行是用一个空格隔开的两个正整数 n 和 m,n 表纸带上格子的个数, m 表纸带上颜色的种类数。



第二行有 n 用空格隔开的正整数,第 i 数字 number 表纸带上编号为 i 格子上面写的数字。



第三行有 n 用空格隔开的正整数,第 i 数字 color 表纸带上编号为 i 格子染的颜色。


输出描述:
共一行,一个整数,表示所求的纸带分数除以10,007所得的余数。


示例1
输入
6 2
5 5 3 2 2 2
2 2 1 1 2 1
输出
82

说明
纸带如题目描述中的图所示。



所有满足条件的三元组为:(1,3,5),(4,5,6)。



所以纸带的分数为(1+5)∗(5+2)+(4+6)∗(2+2)=42+40=82。


示例2
输入
15 4
5 10 8 2 2 2 9 9 7 7 5 6 4 2 4
2 2 3 3 4 3 3 2 4 4 4 4 1 1 1
输出
1388

备注:
对于第1组至第2组数据,1≤n≤100,1≤m≤5;
对于第3组至第4组数据,1≤n≤3000,1≤m≤100;
对于第5组至第6组数据,1≤n≤100000,1≤m≤100000,且不存在出现次数超过20的颜色;
对于全部10组数据,1≤n≤100000,1≤m≤100000,1≤colori≤m,1≤numberi≤100000。


H 1.题目

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述
vigoss18在某997工作制的公司上班,终于有一天爆发了,决定要跑路。



既然要跑路了,当然得对自己的代码做点手脚,既要保证走了之后代码仍然可以运行,又要保证走了之后别人维护不了,所以决定写个程序,用来批量把代码中的注释全部删掉。



输入描述:

对于每个输入文件,处理到文件尾。



输入如题意描述,保证单个输入文件不超过5kb

输出描述:

输出去掉注释以后的内容,除了注释以外的内容全部需要输出,卿不要漏掉换行空格之类的。


2.分析 3.代码 2.比赛总结

AC 4/8
比赛的时候急于敲代码,没有构思好算法、思路,导致中间换了很多种方法,有时最终依旧做不对,很可惜。


比赛结果虽然被淘汰了,但是毕竟自己 基础薄弱,掌握得不全面,继续努力吧!!

3.更新日志

2022.4.5 整理 ( D G H) 先鸽了

欢迎交流、讨论、指正~
不理解、不正确之处,欢迎评论区留言~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/565109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-06
下一篇 2022-04-06

发表评论

登录后才能评论

评论列表(0条)

保存