Codeforces Round #467 (Div. 2)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值