洛谷 P1321 单词覆盖还原 P1401 [入门赛 #18] 禁止在 int 乘 int 时不开 long long题解

这是第一次把两道题放在一起(之前干过,但之前是由于太闲,现在是由于想获得更多的赞

P1321 单词覆盖还原

题目描述

我有一个长度为 l 的字符串,最开始时,这个字符串由 l 个句号(.)组成。

我在这个字符串中,将多次把 boy 或者 girl 两单词,依次贴到这个字符串中。

后贴上单词,会覆盖之前贴上的单词,或者覆盖句号。最终,每个单词至少有一个字符没有被覆盖。

请问,一共贴有几个 boy 几个 girl

输入格式

一行被反复贴有 boy 和 girl 两单词的字符串。

输出格式

两行,两个整数。第一行为 boy 的个数,第二行为 girl 的个数。

输入输出样例

输入 #1

......boyogirlyy......girl.......

输出 #1

4
2

说明/提示

数据保证,3≤l≤255,字符串仅仅包含如下字符:.bgilory

思路:

1.输入字符串

2.在给出的字符串中找出连着的b、o、y或者是g、i、r、l的部分,然后对应的计数器+1

3.输出,注意换行

AC代码:

#include<bits/stdc++.h>//万能头文件
using namespace std;//cin,cout必备
int main()//main主函数开始
{
	string s;//定义一个字符串s
    cin >> s;//输入(不用getline,没空格)
    int a=0,b=0;//a是boy的个数,b是girl的个数
    for(int i=0;i<s.size();i++)//遍历字符串
    {
        if(s[i]=='b'||s[i+1]=='o'||s[i+2]=='y')//连着的boy
        {
            a++;//计数器+1
        }
        if(s[i]=='g'||s[i+1]=='i'||s[i+2]=='r'||s[i+3]=='l')//连着的girl
        {
            b++;//计数器+1
        }
    }
    cout<<a<<"\n"<<b;//输出,注意换行
	return 0;//结束程序
}

奉上提交记录:

AC了AC了!!!

P1401 [入门赛 #18] 禁止在 int 乘 int 时不开 long long

题目描述

在比赛中,根据数据范围,分析清楚变量的取值范围,是非常重要的。int 类型变量与 int 类型变量相乘,往往可能超出 int 类型可以表示的取值范围。

现在,给出两个 int 类型变量 x,y 及其取值范围,请问 x×y 的值是否可能超过 int 类型可以表示的范围?

提示:int 类型可以表示的范围为 [−2147483648,2147483647],即 [−2^31,2^31−1]。也就是,int 类型可以表示的最小值为 −2147483648,最大值为 2147483647。

输入格式

输入共两行。

输入的第一行为两个整数 xl,xu,表示变量 x 的取值范围为 xl≤x≤xu​。

输入的第二行为两个整数 yl,yu​,表示变量 y 的取值范围为 yl≤y≤yu。

输出格式

输出一行一个字符串:

  • 若会超过,则输出 long long int
  • 若不会超过,则输出 int

输入输出样例

输入 #1

1 5
1 5

输出 #1

int

输入 #2

-2147483647 2147483647
-2147483647 2147483647

输出 #2

long long int

说明/提示

数据规模与约定

  • 对于 50%50% 的测试数据,0≤xl≤xu<2^31,0≤yl≤yu<2^31。
  • 对于 100%100% 的测试数据,−2^31≤xl≤xu<2^31,−2^31≤yl≤yu<2^31。

思路:

定义一个judge函数(下方有不定义的),两个参数a,b,里面判断a*b是否超过INT_MAX或小于INT_MIN(函数怎么写要教吗?

AC代码1:

#include<bits/stdc++.h>
using namespace std;
bool f(long long a,long long b)
{
    return a*b>=INT_MIN&&a*b<=INT_MAX;
}
int main()
{
    long long a,b,c,d;
	cin >> a >> b >> c >> d;
	if(f(a,c) and f(a,d) and f(b,c) and f(b,d))
    {
        cout<<"int";
    }
    else
    {
        cout<<"long long int";
    }
    return 0;
}

AC代码2:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long a,b,c,d;
    cin >> a >> b >> c >> d;
    if(a*c>2147483647||a*d>2147483647||b*c>2147483647||b*d>2147483647||b*d<-2147483648||b*c<-2147483648||a*d<-2147483648||a*c<-2147483648)
    {
        cout<<"long long int";
    }
    else
    {
        cout<<"int";
    }
    return 0;
}

还是奉上AC记录:

思路1:AC了!耶!
思路2:代码怎么这么长啊!能短一点吗?!

再提两句:

这道题测试点老多了(104个,前2个和后2个没分,其他1分),所以出现了一些奇怪的东西,比如说这个(这就是我)奇葩,INT_MIN写成了-2147483647导致第101个测试点(Subtask #2第一个)WA还得了100分:啊!INT_MIN写错了!

OK,这篇题解.......就到这里啦,拜拜!(过一会儿你可能会看到P1420 最长连号这玩意儿的题解)

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
过河卒是一个典型的动态规划问题。首先,我们将整个棋盘看作一个二维数组,数组的每个元素表示到达该位置的路径数目。然后,我们根据题目给出的条件,逐步更新数组的元素,直到计算出到达目标位置的路径数目。 具体的解题思路如下: 1. 首先,我们可以将马的位置设置为0,表示无法经过该位置。 2. 然后,我们根据马的位置,更新数组的元素。对于二维数组的每个位置,我们根据左边和上边的位置来计算到达当前位置的路径数目。具体地,如果左边和上边的位置都可以经过,那么到达当前位置的路径数目就等于左边和上边位置的路径数目之和。如果左边或上边的位置无法经过,那么到达当前位置的路径数目就等于左边或上边位置的路径数目。 3. 最后,我们输出目标位置的路径数目。 下面是洛谷p1002过河卒题解C++代码: ```cpp #include <bits/stdc++.h> using namespace std; int main() { long long a[21][21]; int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; // 初始化数组,马的位置设置为0 for(int i=0; i<=20; i++) { for(int k=0; k<=20; k++) { a[i][k] = 1; } } a[x2][y2] = 0; // 根据马的位置更新数组的元素 if(x2 >= 2 && y2 >= 1) a[x2-2][y2-1] = 0; if(x2 >= 1 && y2 >= 2) a[x2-1][y2-2] = 0; if(x2 <= 18 && y2 >= 1) a[x2+2][y2-1] = 0; if(x2 <= 19 && y2 >= 2) a[x2+1][y2-2] = 0; if(x2 >= 2) a[x2-2][y2+1] = 0; if(x2 >= 1) a[x2-1][y2+2] = 0; if(y2 >= 1) a[x2+2][y2-1] = 0; if(y2 >= 2) a[x2+1][y2-2] = 0; // 动态规划计算路径数目 for(int i=1; i<=20; i++) { for(int k=1; k<=20; k++) { if(a[i][k] != 0) { a[i][k] = a[i-1][k] + a[i][k-1]; } } } // 输出目标位置的路径数目 cout << a[x1][y1] << endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值