首页 > 其他分享 >2024年暑假ACM集训第1场

2024年暑假ACM集训第1场

时间:2024-07-26 20:54:20浏览次数:14  
标签:输出 include int 样例 ACM 2024 Copy 集训 输入

A:小青蛙跳台阶

题目描述

想必你应该做过这么一道题:一只小青蛙一次可以跳1级台阶,也可以一次跳2级台阶。求该青蛙跳上第N级台阶总共有多少种跳法?(假设小青蛙的初始位置是第0级台阶)
现在小青蛙遇到了一点麻烦,因为其中有一级台阶是坏的,小青蛙不能跳到这一级。假设坏掉的这一级台阶是第M级,且1<M<N,请问此时小青蛙跳到第N级台阶有多少种跳法?

输入

单组输入。
输入一行包含两个正整数N和M,N<=20,1<M<N,两者之间用英文空格隔开。

输出

输出小青蛙跳到第N级台阶的跳法数。

样例输入 Copy
5 3
样例输出 Copy
2
#include <iostream>
using namespace std;
int a[30];
int main()
{
    int n, m;
    cin >> n >> m;
    a[0] = 1, a[1] = 1;
    for (int i = 2; i <= n; i++)
        if (i == m)
            a[i] = 0;
        else
            a[i] = a[i - 1] + a[i - 2];
    cout << a[n] << endl;
    return 0;
}

 B:众数之和

题目描述

众数是一组数据中出现次数最多的那个数。
现输入一个正整数序列,请找出其中的众数。如果只有一个众数,输出该众数;如果有多个众数,输出这些众数的和。

输入

单组输入。
第1行输入一个正整数N,表示输入序列中正整数的个数,N不超过1000。
第2行输入N个正整数,每个正整数均不超过10^6,两两之间用空格隔开。

输出

如果输入序列中只有一个众数,输出该众数;如果有多个众数,输出这些众数的和。

样例输入 Copy
10
3 2 5 2 1 3 6 5 2 5
样例输出 Copy
7
#include <iostream>
using namespace std;
int a[1000005];
int main()
{
  int n;
  cin >> n;
  int s = 0;
  for (int i = 0; i < n; i++)
  {
    int x;
    cin >> x;
    a[x]++;
    s = max(s, a[x]);
  }
  int sum = 0;
  for (int i = 1; i <= 1000000; i++)
    if (a[i] == s)
      sum += i;
  cout << sum << endl;
  return 0;
}

 C:一二四八

题目描述

Kimi拥有一套数字卡片,每张卡片上标有1、2、4和8这四个数字中的一个。
现在Kimi需要取出若干张卡片,使得这些卡片上的数字之和等于N。
请问Kimi最少需要取出多少张卡片?(四种数字卡片的数量不限)

输入

单组输入。
输入一个正整数N,表示取出的卡片上的数字之和,N不超过1000。

输出

输出最少需要取出的卡片数量。

样例输入 Copy
11
样例输出 Copy
3
#include <iostream>
using namespace std;
int main()
{
  int n;
  cin >> n;
  int s = 0;
  int a[4] = {8, 4, 2, 1};
  for (int i = 0; i < 4; i++)
  {
    int sum = n / a[i];
    s += sum;
    n -= sum * a[i];
    if (n == 0)
      break;
  }
  cout << s << endl;
  return 0;
}

 D:十六进制回文数

题目描述

小米在学习进制转换,今天学习的内容是十进制和十六进制之间的转换。
小米突然想到一个问题,有没有一些十进制正整数,它本身不是回文数,但是转成十六进制(去掉前导0)之后会变成回文数呢?
回文数是指那些从左往右和从右往左读都相同的数字,例如12321、ABBA等。十六进制中包含0-9以及A、B、C、D、E和F一共16个字符。
现在请你编写一个程序,统计在十进制正整数M和十进制正整数N之间(1<=M<N<=1000000)有多少个满足要求的数字(本身不是回文数,转成十六进制并去掉前导0之后会变成回文数)?如果在M和N之间一个满足要求的数字都没有则输出0。
【注意:一位数也是回文数。】

输入

单组输入。
输入两个十进制正整数M和N,1<=M<N<=1000000。两者之间用英文空格隔开。

输出

输出在M和N之间(包括M和N),满足本身不是回文数,但是转成十六进制并去掉前导0之后会变成回文数的数字的个数。如果在M和N之间一个满足要求的数字都没有则输出0。

样例输入 Copy
1 20
样例输出 Copy
6
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool fun1(string s)
{
  int n = s.size();
  for (int i = 0; i < n / 2; i++)
    if (s[i] != s[n - i - 1])
      return false;
  return true;
}
string fun2(int n)
{
  string s = "";
  while (n > 0)
  {
    int t = n % 16;
    if (t < 10)
      s += (char)(t + '0');
    else
      s += (char)(t - 10 + 'A');
    n /= 16;
  }
  reverse(s.begin(), s.end());
  return s;
}
int main()
{
  int m, n;
  cin >> m >> n;
  int sum = 0;
  for (int i = m; i <= n; i++)
    if (!fun1(to_string(i)) && fun1(fun2(i)))
      sum++;
  cout << sum << endl;
  return 0;
}

 E:lsx的立方体

题目描述

给你一个边长为n的立方体。求立方体空间内可构成等边三角形的数目。等边三角形每边必须平行于oxy、oxz、oyz的某个表面,每个点只能在立方体的边界或内点上,每个点的三个坐标x、y、z必须是整数。

样例输入 Copy
1
样例输出 Copy
8
#include<stdio.h>
#include<math.h>
int main()
{
    int n,sum=0,i;
    while(~scanf("%d",&n))
    {
        for(i=1;i<=n;i++)
        {
            sum+=pow(n-i+1,3);
        }
        printf("%d\n",sum*8);
    }
    return 0;
}

 F:X星切糕

题目描述

据说在X星上有一种切糕,这种切糕呈细长形状,并且按长度来进行售卖。
更有意思的是,不同长度的切糕其价格不一样。定价规则如下:
1单位长度:价值为3枚X星币。
2单位长度:价值为7枚X星币。
3单位长度:价值为11枚X星币。
4单位长度:价值为15枚X星币。
5单位长度:价值为20枚X星币。
现有一块N个单位长度的切糕,需要将其切成若干小段,每一小段的长度均不超过5个单位长度,请问可以得到的最大价值是多少枚X星币?

输入

单组输入。
输入一个正整数N表示切糕的总长度,N<=10^6。

输出

输出切成小段之后可以得到的最大价值(X星币的枚数)。

样例输入 Copy
12
样例输出 Copy
47
#include<stdio.h>
int main()
{
    int n,s;
    scanf("%d",&n);
    s=20*(n/5);
    n%=5;
    if(n==4)
        s+=15;
    else if(n==3)
        s+=11;
    else if(n==2)
        s+=7;
    else if(n==1)
        s+=3;
    printf("%d\n",s);
    return 0;
}

 G:解密

题目描述

X星情报人员截获了Z星人的一封密文,但是破解这封密文需要使用一个字符串密钥。这个重要的密钥隐含在一段文本字符串中。
X星情报人员通过对这段文本字符串进行分析,发现在这段字符串中存在一些相同的子串,即出现次数大于等于2次的子串,而最长相同子串即为解密所需的密钥。该文本字符串只包含26个小写字母、26个大写字母和0-9十个数字,不包含任何其他标点和字符。
值得注意的是,两个相同的子串不允许出现交叉和重叠,即这两个相同子串是完全独立的。
现在给你一段文本字符串,请你编写一个程序计算出最长相同子串的长度。

输入

单组输入。
输入一个长度不超过1000的文本字符串,只包含26个小写字母、26个大写字母和0-9十个数字,不包含任何其他标点和字符。
输入保证文本字符串中至少存在两段长度大于等于1的相同子串。

输出

输出在输入字符串中包含的最长相同子串的长度。

样例输入 Copy
12ABCDEABCF
样例输出 Copy
3
提示

在输入字符串中包含的最长相同子串为“ABC”,其长度为3。

#include <iostream>
#include <string>
using namespace std;
string s;
int n, sum;
bool fun(int mid)
{
  for (int i = 0; i + mid - 1 < n; i++)
    for (int j = i + mid; j + mid - 1 < n; j++)
    {
      bool t = true;
      for (int k = 0; k < mid; k++)
        if (s[i + k] != s[j + k])
        {
          t = false;
          break;
        }
      if (t)
        return true;
    }
  return false;
}
int main()
{
  cin >> s;
  n = s.size();
  int l = 1, r = n / 2;
  while (l <= r)
  {
    int mid = (l + r) / 2;
    if (fun(mid))
    {
      sum = mid;
      l = mid + 1;
    }
    else
      r = mid - 1;
  }
  cout << sum << endl;
  return 0;
}

 H:第K大数

题目描述

小米这几天在学习排序。今天他遇到这么一道题:
随机生成N个正整数,其中可能存在一些相同的数字,现在需要找到这N个正整数中第K个最大的整数。需要注意的是,如果存在多个正整数的大小相同,则相同的数字只能被计算一次。
你能否编写一个程序帮助小米找到这个第K大的正整数呢?

输入

单组输入。
第1行包含两个正整数N和K,两者之间用英文空格隔开,其中N<=10^6,K<=10^3。
第2行为N个正整数,两两之间用英文空格隔开。

输出

输出第K大的正整数;如果第K大正整数不存在,则输出“-1”。

样例输入 Copy
8 2
4 2 1 3 5 6 5 6
样例输出 Copy
5
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1000010;
int a[N];
int main()
{
    int n, k;
    cin >> n >> k;
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    sort(a, a + n);
    reverse(a, a + n);
    int s = 1;
    for (int i = 1; i < n; i++) 
    {
        if (a[i] != a[i - 1]) 
            s++;
        if (s == k) 
        {
            printf("%d\n", a[i]);
            return 0;
        }
    }
    printf("-1\n");
    return 0;
}

 I:字符串变换

题目描述

Kimi同学需要对一个全部由英文字母组成的字符串进行变换,其变换规则如下:
(1) 原始字符串的总长度为N,每次从左到右取长度为M(2<=M<=N)的子字符串进行变换;如果剩余字符串长度不到M,则取剩余全部字符串进行变换。
(2) 每次取长度为M的子字符串进行变换时需要将子串中的小写字母全部改为大写字母,然后反转该子串。
请编写一个程序帮助Kimi实现上述字符串变换,输出变换之后的字符串。

输入

单组数据。
第1行输入两个正整数N和M,N表示原始字符串的长度,N<=1000;M表示每次变换时所取的子串长度,2<=M<=N。
第2行输入一个长度为N,且只包含大写和小写英文字母的字符串。

输出

输出变换之后的字符串。

样例输入 Copy
10 4
ABcdACbbEA
样例输出 Copy
DCBABBCAAE
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() 
{
    int n, m;
    cin >> n >> m;
    string s;
    cin >> s;
    for (int i = 0; i < n; i += m) 
    {
        int sum = min(i + m, n);
        for (int j = i; j < sum; j++)
            if (islower(s[j]))
                s[j] = toupper(s[j]);
        reverse(s.begin() + i, s.begin() + sum);
    }
    cout << s << endl;
    return 0;
}

 J:评分计算器

题目描述

某电子商务网站对于商家的评价体系是1-5星评价体系,用户在完成订单之后可以对商家打1/2/3/4/5星,而在客户端上,商家的评级却不一定是整数,而是会显示小数点后的一位。很显然这就需要一个计算器了,小明拥有了一些商户的评价数据,希望可以计算出商家在客户端上显示出的评分。 
这个评分的计算非常简单,就是对该商家的所有客户的星级评价做求一个平均,然后去尾法显示小数点后的一位即可,例如平均得分是3.55,则显示的是3.5。例如某商家获得了1-5星评价各一个,则显示的评分是(1+2+3+4+5)/5=3.0。
如果商家没有获得评价,则显示0.0。  

输入

输入包含5个整数,依次分别表示商家获得1星到5星的评价数量,每一种评价的数量都不大于1000。

输出

输出仅包含一个保留一位的小数,表示商家在客户端上显示的评级。

样例输入 Copy
2 2 1 1 2
样例输出 Copy
2.8
#include<stdio.h>
int main()
{
    int a,b,c,d,e;
    float s;
    scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
    if(a+b+c+d+e==0)
        printf("0.0\n");
    else
    {
        s=(float)(a+2*b+3*c+4*d+5*e)/(a+b+c+d+e);
        s=(float)((int)(s*10))/10;
        printf("%.1f\n",s);
    }
    return 0;
}

 K:缩页

题目描述

某文本编辑软件的打印功能可以根据输入的页码来打印所需的页面。有时用户会输入“1,2,3,1,1,5,6”,但是实际上需要的打印的只有“1-3,5-6”这五页,这时就需要软件对用户输入的页码进行处理。

现在请你将用户输入的页码表示为l1-r1,l2-r2……的形式,如果li=ri,则只输出li即可,中间用逗号隔开。

输入

输入第一行包含若干个整数,最少一个,最多100000个,中间用逗号隔开(页号不大于100000)。

输出

输出包含若干个形如li-ri形式的页码段,中间用逗号隔开。

样例输入 Copy
1,2,3,1,1,2,6,6,2
样例输出 Copy
1-3,6
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int a[1000005];
int main()
{
  string s;
  getline(cin, s); 
  int n = 0;
  for (int i = 0; i < s.size(); i++)
  { 
    if (s[i] == ',')
      continue;    
    int j = i, t = 0; 
    while (j < s.size() && s[j] != ',')
    {                  
      t = t * 10 + s[j] - '0'; 
      j++;
    }
    a[n++] = t; 
    i = j;       
  }
  sort(a, a + n);       
  n = unique(a, a + n) - a;
  int x = a[0],y = a[0];          
  for (int i = 1; i < n; i++)
  { 
    if (a[i] == y + 1)
      y = a[i];
    else
    {
      if (x == y)
        cout << x;
      else
        cout << x << "-" << y;
      cout << ",";
      x = a[i];
      y = a[i];
    }
  }
  if (x == y)
    cout << x;
  else
    cout << x << "-" << y;
  return 0;
}

 L:a碟的棋盘

题目描述

a碟家里有一副国际象棋,他发现国际象棋的棋盘是黑白相间的。
国际象棋的棋盘是8*8大小的,不过他现在想让你打印出一个n(n为偶数)的国际象棋棋盘。
我们用字符'1'表示黑格,'0'表示白格。
棋盘左上角的格子为白格
规定与白格相邻的格子全部为黑格,与黑格相邻的格子全部为白格。

输入

仅一行一个正整数n(2≤n≤1000),保证n为偶数。

输出

输出一个01矩阵,表示国际象棋的棋盘。

样例输入 Copy
8
样例输出 Copy
01010101
10101010
01010101
10101010
01010101
10101010
01010101
10101010
#include<iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        string a="",b="";
        for(int i=1; i<=n/2; i++)
        {
            a+="01";
            b+="10";
        }
 
        for(int i=1; i<=n; i++)
            if(i%2)
                cout<<a<<endl;
            else
                cout<<b<<endl;
    }
    return 0;
}

 

标签:输出,include,int,样例,ACM,2024,Copy,集训,输入
From: https://blog.csdn.net/weixin_73947887/article/details/140724570

相关文章

  • SMU Summer 2024 Contest Round 7
    BuyanInteger1.这题是二分答案,而不是公式拿来整除,以为是整除找了半天自己的错误,其实二分答案一发就能过。#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;typedefpair<int,int>pii;#definexfirst#defineysecond#defineall......
  • [赛记] 暑假集训CSP提高模拟7, 8
    学长出题规律:T1签到题,T2套路题(但没见过),T3神奇题(赛时想的做法几乎都是错的),T4peppapig题学长:今天T3防AKpeppapig:今天比赛防爆零A.Permutations&Primes20pts签到题,可惜没有签到;显然,我们要让经过1的区间最多,所以将1放在序列中间;除了1,就是2和3,所以我们把2和3放在两边,这......
  • 2024暑假集训测试12
    前言比赛链接。T2其实和货车运输这题差不多但是由于给定图为树的部分分都没想出来压根没想到重构树,感觉不太应该,思路还是不清晰,赛时没有拿到那个部分分的,因为拿到的都顺着推出正解了;T3是道黑,赛时\(A,B\)循环输出能拿到\(40\)分,赛后重测了;T4题都看不懂。没挂分因为根......
  • 暑假集训CSP提高模拟8
    T1点击查看代码#include<bits/stdc++.h>#definelllonglongusingnamespacestd;lla[5];intmain(){ cin>>a[1]>>a[2]>>a[3]; sort(a+1,a+3+1); llans=(a[3]-a[1])/2+(a[3]-a[2])/2; a[1]+=(a[3]-a[1])/2*2;a[2]+=(a[3]-a[2])/2*2; if(a......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(3)
    Preface徐神是我们的红太阳,最后2min切了一道极难的string使得在这场前期爆炸的局面最后没有崩得太难看这场前期的开题顺序有点问题导致前5题出的很慢,中后期开始三人一人写一题,然后经典三开三卡好在最后我在WA了五发后写对拍把B过了,徐神又压线过了string,但比较可惜的......
  • 2024杭电第三场
    打了个爽!今天打得很稳,基本没有罚时,相当优雅的一场1001 考虑递推,发现答案和因子有关,再加上森林里只有一棵树的情况(i个节点构成的树的种数为f[i-1])#include<bits/stdc++.h>usingnamespacestd;constintN=1e6,mod=998244353;inlineintadd(intx,inty){return(x+=......
  • 2024中国工业互联网安全大赛智能家电行业赛道选拔赛
    流量分析的附件链接:https://pan.baidu.com/s/1UlWzfmsmRsZTR56FzXLuEg?pwd=6666提取码:6666恶意攻击流量描述:应用系统被植入了恶意后门,并从流量中识别其中的flag,提交格式:fag{XXXXXXXX}追踪这个流量解码过滤或者工具一把梭flag{39084EEF2D28E941F53E4A1AA1......
  • 2024牛客多校Bit Common & Bit More Common
    ABitCommon时间限制:3s(C++/C)/6s内存限制:1048576K(C++/C)/2097152K题目描述Giventwointegers\(n\)and\(m\),amongallthesequencescontaining\(n\)non-negativeintegerslessthan\(2^m\),youneedtocountthenumberofsuchsequences\(A\)tha......
  • 2024LitCTF
    secret这首音乐好听,听完了,中间有段杂音去AU看看 中间有一段藏了东西,放大 出flag了flag{Calculate_Step_By_Step}原铁,启动!解压出来是一张二维码扫出来是原神去010看看  看到有压缩包,提取出来得到一个压缩包,里面是四张图片  去网站上合并    Li......
  • 『模拟赛』暑假集训CSP提高模拟8
    Rank诶好像把7咕了,那就咕吧。膜拜博弈论带我上Rank1。A.基础的生成函数练习题(gf)原[ABC093C]SameIntegers先给\(a\),\(b\),\(c\)按升序排个序,求出相邻两数之差。若较小的两数之差(\(a\)和\(b\))为奇数,先操作\(\lfloor{\frac{b-a}{2}}\rfloor\)次使\(a=b-1\),再操......