笔试强训day25

笨小猴

笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!

这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。

输入描述:

只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。

输出描述:

共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。

**直接模拟题,按照题目的要求去做就行了 **

#include <iostream>
#include <cmath>
#include <string>
using namespace std;
string s;
bool isprim(int n) // 判断 n 是否是质数
{
	if (n < 2) return false;
	for (int i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0) return false;
	}
	return true;
}
int main()
{
	cin >> s;
	int hash[26] = { 0 };
	for (auto ch : s)
	{
		hash[ch - 'a']++;
	}
	int minn = 1000, maxn = 0;
	for (int i = 0; i < 26; i++)
	{
		if (hash[i])
		{
			minn = min(minn, hash[i]);
			maxn = max(maxn, hash[i]);
		}
	}
	if (isprim(maxn - minn))
	{
		cout << "Lucky Word" << endl;
		cout << maxn - minn << endl;
	}
	else
	{
		cout << "No Answer" << endl;
		cout << 0 << endl;
	}
	return 0;
}

主持人调度(一)

有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。

一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。请问一个只有一个主持人能否举办全部活动。

数据范围: 1≤�≤1051≤n≤105 , 0≤������,����≤1090≤start**i,end**i≤109

比较简单直接上手去排序就可以了

class Solution {
public:
    bool hostschedule(vector<vector<int> >& schedule) {
        // write code here
       sort(schedule.begin(),schedule.end());
       int n = schedule.size();
       for(int i = 1;i<n;++i)
       {
        if(schedule[i][0] < schedule[i-1][1])return false;
       }
       return true;
    }
};

分割等和子集

给定一个只包含正整数的数组 nums ,请问能否把这个数组取出若干个数使得取出的数之和和剩下的数之和相同。

数据范围: 1≤�≤500 1≤n≤500 , 数组中的元素满足 1≤�����≤100 1≤numsi≤100

输入描述:

第一行输入一个正整数 n ,表示数组 nums 的长度。

第二行输入 n 个正整数,表示数组中的值。

输出描述:

如果满足题目条件,输出 true ,否则输出 false

#include <iostream>

using namespace std;
const int N = 510,M = 510*100/2;
bool dp[N][M];
//dp[i][j]表示的是从i个数字中挑选,总和恰好是j,能否凑成
int n;
int nums[N];

int main()
{
    
    cin>>n;
    int sum = 0;
    for(int i = 1;i<=n;++i)
    {
        cin>>nums[i];
        sum += nums[i];
    }
    if(sum%2==0)
    {
        dp[0][0] = true;
        for(int i = 1;i<=n;++i)
        {
            for(int j = 0;j<=sum/2;++j)
            {
                dp[i][j] = dp[i-1][j];
                if(j>=nums[i])
                {
                    dp[i][j] = dp[i][j] || dp[i-1][j-nums[i]];
                }   
            }
        }
        if(dp[n][sum/2])cout<<"true"<<endl;
        else cout<<"false"<<endl;
    }
    else{
        cout<<"false"<<endl;
    }
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值