赛后打脸 - ACdream原创群赛(18)のAK's dream 简单题总结

本文分享了两个C++编程挑战题目的解决方案:一是通过字符串处理判断整数范围,二是运用贪心算法解决英雄配宝剑的问题。文章提供了完整的代码实现及思路解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

G 水题wa了两次次简直要哭了:


   给一个不超过三十位的数字,让你判断其值的是在 short, int ,long long 这三个哪一个的范围。

   自己用 char 没考虑清楚就开始敲,wa的心酸酸的,看了学长的代码,简直发现了新大陆,

   原来 string 类型还可以这样用啊 = = 真心长见识了,原谅我的无知,毕竟我是要励志做萌妹子的人。


   照着学长的思路敲了一遍 升级版的代码2.0 感觉自己萌萌哒!!!

   

   全部的输入数据都加上前导零用来方便比较。


   G:Integer in C++

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;

int main()
{
	cin.sync_with_stdio(false);
	string str;
	while (cin >> str)
	{
		string num[3] = { "000000000000000000000000032767", "000000000000000000002147483647", "000000000009223372036854775807" };
		string temp ="";

		int len = str.length();
		int s = 0;
		 
		if (str[0] == '-')
		{
			len--;
			s++;

			for (int i = 0; i < 3; ++i)
			{
				num[i][29] = '8';
			}
			
		}
		
		for (int i = 0; i < 30 - len; ++i)
		{
			temp += '0';
		}
		
		for (int j = s; j < len + s; ++j)
		{
			temp += str[j];
		}
				 

		if (temp <= num[0])puts("short");
		else if (temp <= num[1])puts("int");
		else if (temp <= num[2])puts("long long");
		else puts("It is too big!");


	}
	return 0;
}

D 在公式推导上理解无能了一下 T T:


       如果一把剑的重量不超过勇士的能力值,那么这个勇士就能拿起这把剑。每个勇士拿起一把剑。


       给你 N 把剑,N 个勇士,问有多少种勇士拿剑的方式。组合数学问题。

G:Heros and Swords

数据:

3               --》  N 值
2 3 4         --》  每把剑的重量
6 3 5         --》  每个勇士的能力值


         贪心思想,将剑的重量与勇士的能力值做一个sort从小到大的排序。

         下标:   0      1      2

         剑:       2      3      4

         勇士:   3      5      6


        0号勇士可以拿起0号或者一号剑 那么有两种选择   *2;

        一号勇士可以拿除去零号勇士挑选后的两把剑        *2;

        二号勇士能力高于三把剑,但只剩下一把剑            *1;

        所以一共有 4 种勇士拿剑的方式。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
 
const int maxn = 100000+5;
const int MOD = 1000000007;
int heros[maxn], swords[maxn];
 
#define FOR(i,n) for(int i=0;i<n;++i)
typedef long long ll;
 
int main()
{
    int t,n;
    cin >> t;
     
    for (int j = 1; j <= t;++j)
    {
        cin >> n;
        FOR(i, n)
            cin>>swords[i];
        FOR(i, n)
            cin>>heros[i];
 
        sort(swords, swords + n);
        sort(heros, heros + n);
        int ans = 1;
        int l = 0;
 
        FOR(i, n)
        {
            while (l < n && heros[i] >= swords[l]) l++;
            ans = (ll)ans * (l - i) % MOD;
        }
 
        //============= answer ==========
        printf("Case #%d: %d\n", j,ans);
         
    }
    return 0;
}
 








      


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值