2023年2月月赛

2023年2月月赛

T1 格式改写

题目描述

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

输入格式

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

输出格式
单个整数:表示最少修改次数

数据范围

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

样例数据

输入:

TheQuickBrownFoxJumpsOverTheLazyDog

输出:

9

说明:

将大写改小写

思路

统计字母大小写的个数

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    char c;
    int smallletters = 0, largeletters = 0, ans = 0;
    while (cin>>c){
        if (c >= 'a' && c <= 'z')        
            smallletters++;        
        else if (c >= 'A' && c <= 'Z')        
            largeletters++;        
   }
    if(smallletters>largeletters)
    	cout<<largeletters<<endl;
    else 
		cout<<smallletters<<endl;
    return 0;
}

倍数统计

题目描述

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

输入格式

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

输出格式

单个整数:表示答案。

数据范围

−10 9≤a≤b≤109

1≤c≤109

样例数据

输入:

4 6
5

输出:

1

思路

分别枚举不同种的情况,共分5种。

代码

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

int main(){
	long long a,b,c,ans;
	cin>>a>>b;
	cin>>c;
	if(a>0){
		ans=b/c-((a-1)/c);
	}
	if(b<0){
		ans=abs(a)/c-((abs(b)-1)/c);
		}
	if(a<0&&b>0){
		ans=abs(a)/c+b/c+1;
	}
	if(a==0){
		ans=b/c+1;             
	}
	if(b==0){
		ans=abs(a)/c+1;
	}
	cout<<ans<<endl;
	return 0;
}

区间的并

题目描述

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

输入格式

第一行:单个整数 n;
第二行到第 n+1 行:每行两个整数 a i _i i
与 b i _i i, 表示一个闭区间 [a i , _i, i,b i _i i].

输出格式

若干行:表示输入区间的并集。每行两个整数,表示一个闭区间的两个端点,这些闭区间应该按照起点从小到大排序。

数据范围

对于 50% 的数据,1≤n≤104

样例数据

输入:

3
10 12
1 3
2 5

输出:

1 5
10 12

思路

为了防止两个区间合并,例如【1,2】与【3,4】
采用下标*2的方法
最后除以2.

代码

代码

平分数字(一)

题目描述

给定 n 个整数:a 1 _1 1,a 2 _2 2,a n _n n

,请判能否将它们分成两个部分(不得丢弃任何数字),每部分的数字之和一样大。

输入格式

第一行:单个整数 n;
第二行:n 个整数,表示 a 1 _1 1,a 2 _2 2,a n _n n
输出格式
若能否平分,输出 Matched,否则输出 No

数据范围

对于 50% 的数据,1≤n≤18;
对于 100% 的数据,1≤n≤24;
-10,000,000\leq a_i\leq 10,000,000−10,000,000≤a
i

≤10,000,000
样例数据
输入:
4
1 2 3 4
输出:
Matched
说明:
1 + 4 = 2 + 3
输入:
3
2 2 2
输出:
No

思路

搜索

代码

#include<bits/stdc++.h>
#define INF 999999999
#define N 100010
using namespace std;
int n;  
long long sum,a[30]; 			
bool flag=0;
int dfs(int t,long long result) 
{
	if(result == sum)		    
	{
		flag = 1; return 0;
	}
	if(t>n)                     
	{
		return 0; 
	}
	dfs(t+1,result);            
	dfs(t+1,result+a[t]);       
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) 
	{
		cin>>a[i];
		sum+=a[i];
	}
	if(sum%2!=0)//sum%2==1 
	{
		cout<<"No"<<endl;
		return 0;
	}
	sum/=2;
	dfs(1,0);
	if(flag == 1)
	{
		cout<<"Matched"<<endl;
	}
	else
	{
		cout<<"No"<<endl;
	}
 return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值