上海市计算机学会竞赛平台 2月月赛 丙组

该博客详细解析了上海市计算机学会竞赛丙组的五道算法题目,包括T1的格式改写、T2的倍数统计、T3区间的并、T4平分数字和T5圆环三染色。每道题都提供了题意分析、解题思路及代码实现,适合提升算法能力和竞赛训练。
摘要由CSDN通过智能技术生成

T1 格式改写

题目描述

给定一个仅由拉丁字符组成字符序列,需要改写一些字符的大小写,使得序列全部变成大写或全部变成小写,请统计最少修改多少个字符才能完成这项任务。

输入格式

一个字符序列:保证仅由拉丁字符构成

输出格式

单个整数:表示最少修改次数

数据范围

设输入的字符数量为 n,则保证 1≤n≤100,000

样例数据

输入:

TheQuickBrownFoxJumpsOverTheLazyDog

输出:

9

说明:

将大写改小写

分析

题意

将整个字符串改为大写或小写,输出最小修改次数

思路

将整个字符串查一遍,记录其中大写和小写字母的个数,输出最小值

代码
#include <bits/stdc++.h>
using namespace std;

string s;

int main(){
   
	getline(cin, s);
	int len = s.size();
	int t = 0, l = 0;
	for (int i = 0; i < len; i++){
   
		if (islower(s[i]))
			l++;
		else
			t++;
	}
	cout << min(t, l) << endl;
	return 0;
}

T2 倍数统计

题目描述

给定整数 a, b 与正整数 c,求出在 a 到 b 之间(包含 a 与 b)有多少整数是 cc 的倍数。

输入格式

第一行:两个整数 a 与 b;
第二行:单个正整数 c。

输出格式

单个整数:表示答案。

数据范围

-109≤a≤b≤109

1≤c≤109

样例数据

输入:

4 6
5

输出:

1

分析

题意

输出a~b中c的倍数

思路1

从a循环到b,记录c倍数的个数,但数据量太大,会超时。

思路2

假设a~b中有个数n是c的倍数,那么n+c一定也是c的倍数。
那么我们可以先循环找到从a开始第一个c的倍数n,再求出n~b中有几个c。

代码
#include <bits/stdc++.h>
using namespace std;

long long a, b, c;

int main(){
   
   cin >> a >> b >> c;
   int num, ans = 1;
   for (int i = a; i <= b; i++)
   	if (i % c == 0){
   
   		num = i;
   		break;
   	}
   ans += (b - num) / c;
   cout << ans << endl;
   return 0;
}

T3 区间的并

题目描述

给定一个数轴上的 n 个闭区间,第 i 个闭区间的两端点为 [ a i , b i ] [a_i,b_i] [ai,bi],它们的并集可以表示为若干不相交的闭区间,请按照左端点从小到大的顺序输出这些区间的并集。

输入格式

第一行:单个整数 n;
第二行到第 n+1 行:每行两个整数 a i a_i ai b i b_i bi 表示一个闭区间 [ a i , b i ] [a_i,b_i] [ai

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值