实小社团练习赛12
3118,7887,2842,7880
T1
数学模拟
周期问题。
假设到达时间为
那么我们可以把
另一只狗处理方式一样。
T2
模拟
会用
1.定义map
map<string,double> d;
2.打表记录广告价格
for...
{
cin>>广告>>价格;
d[广告]=价格;
}
3.根据访问的广告,累加价格即可。
T3
贪心、枚举
首先想到基础的枚举
如果枚举输入的温度,则20000×20000=4亿,显然要超时。
阶段1:状态-->所有的给定的温度
阶段2:状态-->所有的奶牛
for n只奶牛的温度区间{
当前产奶量初始化为0
for 枚举n只奶牛的温度区间
根据区间是否重叠,计算出产奶量
当前方案产奶量跟之前的最优产奶量比较
}
换个角度思考,
但是我们可以用类似垃圾装袋的思路(慈溪市2016年第三题)。
先对左端点和右端点都进行从小到大排序,然后比较左右端点,会有以下几种情况(首先做好初始化,认为所有奶牛觉得冷,即产量总和初值为
(1)当
(2)当
重复1~2操作,直到扫描完所有的端点。
伪代码
算法核心代码
当前产奶总量 = N*X;
擂主 = N*X;
while (i<=N || j<=N) {
if (A[i] <= B[j]) { //把B[j]看成适宜温度的最大值
当前产奶总量 += Y-X;
i++;
} else { //寻找新的B[j]
当前产奶总量 += Z-Y;
j++;
}
if (当前产奶总量 > 擂主)
擂主 = 当前产奶总量;
}
整个算法时间复杂度为
T4
BFS
模板题,区别是起点很多,如果只有一个起点,很多人马上就明白如何去宽搜,那么当起点多个的时候,其实就是都塞到队列中即可。
for(int i = 1,x,y; i <= A; i++){
cin>>x>>y;
v[x][y]=1; //标记为不可访问
q.push(make_pair(x,y));
}
最后,根据询问的情况,输出对应坐标的步数(感染瘟疫时间),所以BFS需要打表记录每个位置的步数。