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,表示需要的而铅笔数量
- 输入三种不同规格的笔的数量和价格
- 输出最小花费
总结
很水,暴力解;