首页 > 其他分享 >ACM寒假集训第一讲博客1

ACM寒假集训第一讲博客1

时间:2025-01-23 14:42:27浏览次数:1  
标签:std map int cin ACM ++ 寒假 include 集训

num1:
code:该题使用C语言

include<stdio.h>

int main(void)
{
int n;
scanf("%d",&n);
printf("L");
for(int i=0;i<n;i++)
{
printf("o");
}
printf("ng");
}
解题思路:直接打印出L与ng,其次使用循环输出n个o即可。

num2:
code:C++语言

include

include

include

include

bool isYes(const std::string& s)
{
std::string lower_s = s;
std::transform(lower_s.begin(), lower_s.end(), lower_s.begin(),
[](unsigned char c){ return std::tolower(c); });
return lower_s == "yes";
}

int main()
{
int t;
std::cin >> t;
std::string s;
for (int i = 0; i < t; ++i)
{
std::cin >> s;
if (isYes(s)) {
std::cout << "YES\n";
} else {
std::cout << "NO\n";
}
}
return 0;
}
解题思路:首先定义函数isYes实现字符串大小写不敏感比较,判断输入是否等于"yes"。在main函数中,读取字符串数量,循环读取每个字符串并调用isYes判断,根据结果输出"YES"或"NO",从而实现对一系列输入的处理。

num3:
code:C++语言

include

include

std::string getParity(const std::string& number)
{
char lastDigit = number.back();
int digit = lastDigit - '0';
return (digit % 2 == 0) ? "even" : "odd";
}

int main()
{
int N;
std::cin >> N;
std::string number;
for (int i = 0; i < N; ++i) {
std::cin >> number;
std::cout << getParity(number) << std::endl;
}
return 0;
}
解题思路:定义一个函数getParity,通过获取字符串形式数字的最后一位字符,计算其数值并判断奇偶性,返回对应字符串("even"或"odd")。在main函数中,读取数字数量并循环读取每个数字字符串,调用getParity并输出结果。

num4:
code:C++语言

include

include

include

include

int main() {
int t;
std::cin >> t;
while (t--)
{
int n, m;
std::cin >> n >> m;
std::string a;
std::cin >> a;
std::vector count(7, 0);
for (char c : a)
{
count[c - 'A']++;
}
int missing = 0;
for (int i = 0; i < 7; ++i)
{
if (count[i] < m)
{
missing += m - count[i];
}
}
std::cout << missing << std::endl;
}
return 0;
}
解题思路:程序旨在处理多组数据,每组数据首先读取一个未使用的整数(可能是原题目的一部分被省略),紧接着读取一个目标次数m和一个仅包含大写英文字母A至G的字符串。对于每组数据,程序使用一个大小为7的整数向量来统计字符串中每个字母的出现次数。然后,程序遍历这个向量,计算为了达到每个字母都至少出现m次所需补充的总次数(即缺失次数)。最后,程序输出每组数据的总缺失次数。

num5:
code:C++语言

include

using namespace std;
int main()
{
float n, m, k;
cin >> n >> m >> k;
int i,j,sum1=0,sum2=0;
int a[1500][1500];
for (i = 1; i <= m; i++)
{
for (j = 1; j <= n; j++)
{
cin >> a[i][j];
}
}
for (i = 1; i <= m; i++)
{
sum1 = 0;
for (j = 1; j <= n; j++)
{
if (a[i][j] == k)
sum1++;
}
if (sum1 >= n / 2)
sum2++;
}
if (sum2 >= m / 2)
cout << "YES";
else
cout << "NO";
return 0;
}
解题思路:首先接收三个输入值(尽管以浮点数接收,但实质作为整数处理),分别代表矩阵的列数n、行数m和特定值k。然后,声明一个二维数组a用于存储m行n列的矩阵数据。通过双层循环读取矩阵的每个元素。再次利用双层循环遍历矩阵,统计每行中值等于k的元素个数,若某行满足该个数大于等于n的一半,则计数器sum2加1。最后,判断sum2是否大于等于m的一半,若是则输出"YES",否则输出"NO"。

num6:
code:C++语言

include

using namespace std;
int main()
{
int n, i, j, q;
cin >> n;
char s[n], c, d;
for (i = 0;i < n;i++)
{
cin >> s[i];
}
cin >> q;
for (i = 0;i < q;i++)
{
cin >> c >> d;
for (j = 0;j < n;j++)
{
if (s[j] == c)
{
s[j] = d;
}
}
}
for (i = 0;i < n;i++)
{
cout << s[i];
}
system("pause");
return 0;
}
解题思路:首先,接收一个整数n作为字符串长度,并据此声明字符数组s。随后,通过循环读取n个字符填充到s中。接着,读取一个整数q,代表接下来要进行的字符替换操作次数。对于每次操作,读取两个字符c和d,遍历字符串s,将所有c替换为d。完成所有替换后,再次遍历s并输出修改后的字符串。(但该题运行超时,仍然有改进空间)

num7:
code:C++语言

include

include

include

using namespace std;

int main() {
int n, m;
cin >> n >> m;

vector<vector<int>> matrix(n, vector<int>(n));
for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
        cin >> matrix[i][j];
    }
}
vector<int> row_map(n), col_map(n);
for (int i = 0; i < n; ++i) {
    row_map[i] = i;
    col_map[i] = i;
}

for (int i = 0; i < m; ++i) {
    int op, x, y;
    cin >> op >> x >> y;
    --x; --y; 
    if (op == 0) {
        swap(col_map[x], col_map[y]);
    } else {
        swap(row_map[x], row_map[y]);
    }
}
for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
        cout << matrix[row_map[i]][col_map[j]] << (j == n - 1 ? '\n' : ' ');
    }
}

return 0;

}
解题思路:首先,接收矩阵大小n和操作次数m,然后读取n×n矩阵的元素。接着,初始化两个映射数组row_map和col_map,用于记录行和列的原始索引。根据输入的操作指令(行交换或列交换),更新row_map和col_map的映射关系。最后,通过遍历矩阵,并利用row_map和col_map进行索引映射,输出经过所有交换操作后的矩阵。

心得体会:ACM算法竞赛题目更多偏向于对于算法的思考,对于代码实现的难度较低,需要用更加多的精力投入于算法的改进思考。

标签:std,map,int,cin,ACM,++,寒假,include,集训
From: https://www.cnblogs.com/603751139-qq-com/p/18687772

相关文章

  • acm 专题一
    一、第一题代码:#include<iostream>usingnamespacestd;#include<string>intmain(){ intn; cin>>n; strings(n,'o'); cout<<'L'<<s<<"ng"; return0;}思路:通过字符串s实现‘o’的n次复制,然后输出二、第二题代码:#inc......
  • 102400118 林嘉祚 集训第一专题
    AC截图1、LongLoong本题易知字符串开头为L,结尾为ng,唯一不同的是中间o的个数,于是想到用3个字符串拼接得到目标字符串。(直接用for循环输出似乎更简单)#include<iostream>#include<string>usingnamespacestd;intmain(){ intn; cin>>n; stringstr="L"; stri......
  • 零基础ACM学习的第一天
    importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Scannersc=newScanner(System.in); intt=sc.nextInt(); System.out.print("L"); for(inti=0;i<t;i++){ System.out.p......
  • ACM寒假线上集训第一次总结
    第一题这一题就是想到最简单的循环结构总结:看了学长大人的代码后发现自己的代码还是不够简洁第二题这题的想法是干脆直接转化成大写比较总结:试着使用了C++的string类以及新的遍历方式,有点牛逼的第三题这题就常规字符串,看末尾字符代表的数字奇偶总结:刚刚开始把.back()写......
  • 「2025 - 寒假 - Day-2 提高笔记-反悔贪心」
    反悔贪心贪心是按照一定顺序进行选择的思想,但是局部最优不等于全局最优,有的时候我们需要用到反悔贪心,看一道例题。BuyLowSellHigh思路我们发现不能简单的通过最小的股票或者最大的股票,又或是次大的股票进行操作。这时,我们考虑一个问题,在\(i<j<k\)中,利润分别是什么?......
  • 【vjudge训练记录】大一寒假专项训练——前缀和/差分
    训练情况A题前缀和模板题,我们输入完\(a_i\)后直接求前缀和\(a_i=a_i+a_{i-1}\),求区间\([l,r]\)的和就为\(a_r-a_{l-1}\)点击查看代码#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve(){intn,m;c......
  • 硝基甲苯之袭(2025牛客寒假算法基础集训营1)
    #include<bits/stdc++.h>#defineendl'\n'#defineintllusingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();signedmain(){#ifdefGordenfreopen("in.txt","rt",stdi......
  • 数值膨胀之美(2025牛客寒假算法基础集训营1)
    #include<bits/stdc++.h>#defineendl'\n'#defineintllusingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();constintinf=0x3f3f3f3f;signedmain(){#ifdefGordenfreopen("in.txt&q......
  • 井然有序之衡(2025牛客寒假算法基础集训营1)
    #include<bits/stdc++.h>#defineendl'\n'#defineintllusingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();signedmain(){#ifdefGordenfreopen("in.txt","rt",stdi......
  • 一气贯通之刃(2025牛客寒假算法基础集训营1)
    #include<bits/stdc++.h>#defineendl'\n'#defineintllusingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();constintN=1e5+7;vector<vector<int>>e(N);signedmain(){#ifdefGor......