A
统计一下出现了多少个大于0的数字就行
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <utility>
#include <bitset>
using namespace std;
#define LL long long
#define pb push_back
#define mk make_pair
#define pill pair<int, int>
#define mst(a, b) memset(a, b, sizeof a)
const int qq = 1e5 + 10;
const int INF = 1e9 + 10;
const int MOD = 1e9 + 7;
int vis[1005];
int main() {
int n; cin >> n;
for (int i = 0; i < n; ++i) {
int x; cin >> x;
vis[x]++;
}
int cnt = 0;
for (int i = 1; i <= 1000; ++i) {
if (vis[i] > 0) cnt++;
}
cout << cnt << endl;
return 0;
}
B
题意:求从2~y中选一个数字 要求不能被 2~p中任何一个数整除,求出这个最大的数
思路:很显然我们可以知道一个大于p并且小于等于y的素数一定是答案,素数分布较小所以可以直接从大到小枚举答案,要么是素数要么不被2~p中任何一个数整除
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <utility>
#include <bitset>
using namespace std;
#define LL long long
#define pb push_back
#define mk make_pair
#define pill pair<int, int>
#define mst(a, b) memset(a, b, sizeof a)
const int qq = 1e5 + 10;
const int INF = 1e9 + 10;
const int MOD = 1e9 + 7;
int main() {
int p, y; cin >> p >> y;
int ans = -1;
for (int i = y; i > 0; --i) {
int fg = i;
for (int j = 2; j * j <= i; ++j) {
if (i % j == 0) {
fg = j;
break;
}
}
if (fg > p || fg == i) {
ans = i;
break;
}
}
if (ans <= p) cout << -1 << endl;
else cout << ans << endl;
return 0;
}
C
题意:有一个炉子,当火炉是开启后k分钟后自动关闭,人没d分钟回去检查一下火炉的状态,如果关了就打开,现在需要烤一个食物需要t分钟,如果烤的时候火炉都是开的则需要t分钟,如果烤的时候火炉都是关的则需要2t分钟,现在问你烤好的时间,最初火炉是开的
思路:可以发现答案要么是整数要么是x.5 ,而且可以发现这个是有周期性,自己讨论下就行, 一定要注意区分实际烤的时间和作用在时间t上的时间
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <utility>
#include <bitset>
using namespace std;
#define LL long long
#define pb push_back
#define mk make_pair
#define pill pair<int, int>
#define mst(a, b) memset(a, b, sizeof a)
const int qq = 1e5 + 10;
const int INF = 1e9 + 10;
const int MOD = 1e9 + 7;
const double eps = 1e-9;
int main() {
LL k, d, t;
scanf("%lld%lld%lld", &k, &d, &t);
LL l = 0, r = 1e18 / d, mid;
LL ti = 0;
while (l <= r) {
mid = (l + r) >> 1;
if (mid * d >= k) {
ti = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
ti = ti * d;
double tmp = k * 1.0 + (ti - k) / 2.;
LL ct = floor(t * 1.0 / tmp);
double tt = ct * tmp;
if (abs(tt - t) < eps) {
printf("%lf\n", ct * ti * 1.0);
return 0;
}
tt = t - tt;
if (tt <= k * 1.) {
printf("%lf\n", ct * ti + tt);
} else {
printf("%lf\n", ct * ti + k + (tt - k) * 2.);
}
return 0;
}
很久没写过codeforces今天一写C题思路没理清楚,就是在区分实际烤的时间和作用在t上面的时间导致一直在debug