/好慌,补坑。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!/
A
—————————————————————————————
题意:n 个 橘子, 大小大于 b 的不要, 盛橘子汁的容器 为 d, 如果橘子汁溢出了, 那么清理一次容器 使 之内的橘子汁为 0, 问清理多少次。
题解:模拟。注意是大于等于还是大于就可以了,代码很清晰。
代码:
#include <iostream>
#include <queue>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAXN = 100000 + 10;
int ora[MAXN];
int main()
{
int a, b, d;
cin >> a >> b >> d;
for(int i = 1; i <= a; i ++)
scanf("%d",&ora[i]);
int sum = 0, ans = 0;
for(int i = 1; i <= a; i ++)
{
if(ora[i] > b)
continue;
sum += ora[i];
if(sum > d)
{
ans ++;
sum = 0;
}
}
cout << ans << endl;
return 0;
}
/*
Input
2 951637 951638
44069 951637
Output
0
Answer
1
*/
}
B
—————————————————————————————
题意:数轴上有 n 个点, 给你所在的位置 a , 求你走过 n-1 个点的最短距离。
题解:分类讨论,弱鸡qer 比较zz。
代码:
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN = 1000000 + 10;
int l[MAXN];
int getdis(int l, int a, int r)
{
return min(abs(a-l)*2 + abs(r-a), abs(r-a)*2 + abs(a-l));
}
int main()
{
int n, a;
cin >> n >> a;
for(int i = 1; i <= n; i ++)
scanf("%d",&l[i]);
if(n == 1)
puts("0");
else{
sort(l+1,l+n+1);
int ans = 2147483647;
if(a <= l[1])
ans = min(ans, abs(l[n-1] - a));
else if(a >= l[n])
ans = min(ans, abs(l[2] - a));
else if(n == 2)
ans = min(abs(a - l[1]), abs(l[n] - a));
else if(l[1] < a && l[2] > a)
ans = min(getdis(l[1],a,l[n-1]), abs(l[n] - a));
else if(l[n] > a && l[n-1] < a)
ans = min(getdis(l[2],a,l[n]), abs(l[1] - a));
else ans = min(getdis(l[1],a,l[n-1]), getdis(l[2],a,l[n]));
printf("%d\n",ans);
}
return 0;
}
终于补上了,嘿嘿嘿、