刷题笔记-24年3月第五组
Created at Updated at

1164 Words

24年-3月-第五组

P1789★★★★★

MC生存-插火把:在 n x n矩阵中,放置火把和萤石在不同的位置上面,确定光的照射范围,统计暗处/怪物的数量

思路

  • vector数组必不可少,初值置为-1,表示全部为暗处
  • 读入火把和萤石的位置
  • 计算光亮处的位置

总结

  • 暴力求解,答案不全对;后续要改进

P1830 ★

轰炸III:又是矩形区域相关的题目,n x m的城市,遭遇x次轰炸,有y个关键点,统计关键点是否被轰炸,被炸了几次,最后一次是第几轮

思路

  • 输入n,m,x,y;
  • 输入炸弹的矩形区域和关键点的坐标

总结

延续了生存火把的思路,用的一维数组存放了矩阵,结果是对的;

P1838 ★

三子棋I:判断小a和uim谁赢,小a总是先下;

思路

  • 读入下棋的顺序
  • 判定并输出结果

总结

使用stoi函数容易报错,换成其他方法就对了,奇怪的OJ系统

P1851 ★★★★★

好朋友:读不懂题,服了,先要找出一个数的所有约数,求和;找到具备非常好友的序列号

思路

  • 读入序列号
  • 判断该序列之后的数哪些有非常好友

总结

参考了评论区的枚举法,没太明白意思,还需要后续再次研究;

P1867 ★★★★★

MC生存(经验值):生命值的上限是1,如果操作需要付出的生命值大于x,就死亡,本次及以下的操作都无效;每2的m此方为一级

思路

  • 读入操作的次数和每次进行的操作
  • 每次操作表示的付出的生命值和得到的经验值

P1876 ★

开灯:所有的灯都是关着的,1号把1的倍数的所有灯全部打开,2号把2的倍数的灯全部关上,3号把3的倍数的灯开的关上,关的开起来

思路

  • 创建vector数组,0表示灯是关的,1表示灯是开的
  • 进行N轮操作
  • 输出开着的灯的编号

总结

  • 有更简单的方法,只用输出平方和项的序号就行了

P1887 ★

乘积最大3:找出M个和为N的正整数,要求乘积尽可能的大,输出字典序(从小到大)最小的方案

思路

  • 读入N,M;
  • 要求M个数的和为n
  • 找出所有的数 不知道怎么求和为n的m个数,原来是一道数学题,要明白:和一定,差小积大,n个数之间的差越小,积会越大;

总结

方法很精炼

int main()
{
    int sum=0;   //sum 表示已经确定了的数的和,方便找出剩余的数
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        cout<<(n-sum)/(m-i)<<" ";
        sum+=(n-sum)/(m-i);
    }
    return 0;
}

P1888 ★

三角函数:输入勾股数,输出较小的角的正弦值

思路

  • 输入勾股数
  • 找出最长边,找出最短边
  • 输出正弦表达式

总结

很水的一道题,但是有一个点没有通过测试,原来有坑,要约分 gcd约分的函数要记牢

    int x=__gcd(num[0],num[2]);

P1897 ★★★★★

电梯里的尴尬:计算电梯的运行总时间,输入乘坐电梯的人数n和每个人要去的楼层,上一层需要6秒,开门需要5秒,每下去一个人要加1秒

思路

  • 输入n和每个人要去的楼层
  • 计算运行时间n+p5+num[n-1](6+4) n为人数,p为电梯开门的次数

总结

有两个点tle,可能与sort函数不能用在过大的数组有关系,后续要改

P1909 ★

买铅笔:商店只能整包的买不同规格的b,为了满足数量大于n,计算最小消费

思路

  • 输入n,表示需要的而铅笔数量
  • 输入三种不同规格的笔的数量和价格
  • 输出最小花费

总结

很水,暴力解;