第五次双周赛

L1-5 判断素数

漏了个1不是素数啊啊啊啊啊啊啊啊啊啊啊,真该死啊

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin >> n;
	while (n--)
	{
		ll num;
		cin >> num;
        if(num==1){
            cout << "No" << '\n';
			continue;
        }
		if (num < 4) {
			cout << "Yes" << '\n';
			continue;
		}
		if ((num + 1) % 6 != 0 && (num - 1) % 6 != 0) {
			cout << "No" << "\n";
			//continue;
		}
		else {
			int yes = 1;
			// for (int i = 6; (i + 1) <= sqrt(num) || (i - 1) <= sqrt(num); i *= 6) {
			// 	if (num % (i + 1) == 0 || num % (i - 1) == 0) {
			// 		cout << "No" << '\n';
			// 		yes = 0;
			// 		break;
			// 	}
			// }
			for (ll i = 2; i <= sqrt(num); i++) {
				if (num % i == 0) {
					cout << "No" << '\n';
					yes = 0;
					break;
				}
			}
			if (yes) {
				cout << "Yes" << '\n';
			}
		}
	}
}

L1-7 连续因子

菜鸡一个只想到暴力,思路是两层循环,外层从2到n枚举连续序列的第一个数,内层从i到n枚举连续序列,为了满足最小序列,就当j-i+1>maxn的时候才更新,即只存第一个找到的序列,那自然是最小,然后发现卡tle,想想发现外层没必要枚举到n,sqrt(n)就够了,因为n与大于sqrt(n)的数的因子比小于sqrt(n),那自然不可能找到因子比sqrt(n)大并构成序列,但若n是个素数,会出现maxn没更新成1的情况,要单独处理下

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
	ll n;
	int ans[20];
	scanf("%lld", &n);
	int maxn = 0;
	ans[1] = n;
	for (ll i = 2; i <= sqrt(n); i++) {
		ll temp = 1;
		for (ll j = i; temp <= n; j++) {
			temp *= j;
			if (n % temp == 0 && j - i + 1 > maxn) {
				maxn = j - i + 1;
				//printf("%d",maxn);
				//ans[0] = n / temp;
				for (int k = 1; k <= maxn; k++) {
					ans[k] = i + k - 1;
				}
			}
		}
	}
	printf("%d\n", max(maxn,1));
	printf("%d", ans[1]);
	for (int i = 2; i <= maxn; i++) {
		printf("*%d", ans[i]);
	}
}

L2-2 秀恩爱分得快
纯纯大模拟,以后写大模拟一定多用函数,全堆进main里调都不好调,而且先打好框架在写方便很多

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define ll long long
using namespace std;
double mymap[1010][1010] = { 0 };

int juedui(int x) {
	if (x < 0)return -x;
	return x;
}
int main() {
	int n, m;
	int sex[1010];
	scanf("%d%d", &n, &m);
	while (m--)
	{
		int k;
		scanf("%d", &k);
		int temp[510];
		int temp1[510];
		for (int i = 0; i < k; i++) {
			char temp2[1010];
			scanf("%s", &temp2);
			if (temp2[0] == '-') {
				temp1[i] = -1;
				int temp3 = 0;
				int len = strlen(temp2);
				for (int i = 1; i < len; i++) {
					temp3 = temp3 * 10 + (temp2[i] - '0');
				}
				temp[i] = temp3;
				sex[temp3] = -1;
			}
			else {
				temp1[i] = 1;
				int temp3 = 0;
				int len = strlen(temp2);
				for (int i = 0; i < len; i++) {
					temp3 = temp3 * 10 + (temp2[i] - '0');
				}
				temp[i] = temp3;
				sex[temp3] = 1;
			}

		}
		double qin = 1.0 / k;
		for (int i = 0; i < k; i++) {
			for (int j = 0; j < k; j++) {
				if (i == j || temp1[i] * temp1[j] > 0)continue;
				mymap[temp[i]][temp[j]] += qin;
			}
		}
	}
	char a[1010];
	char b[1010];
	scanf("%s%s", &a, &b);
	int a1 = 0;
	int len = strlen(a);
	int i=0;
	if (a[0] == '-')i = 1;
	for (; i < len; i++) {
		a1 = a1 * 10 + (a[i] - '0');
	}
	 i = 0;
	if (b[0] == '-')i = 1;
	int b1 = 0;
	len = strlen(b);
	for (; i < len; i++) {
		b1 = b1 * 10 + (b[i] - '0');
	}
	int zuiqin = 0;
	for (int i = 0; i < n; i++) {
		if (mymap[a1][i] > mymap[a1][b1]) {
			printf("%s ", a);
			if (a[0] == '-') {
				printf("%d\n", i);
			}
			else {
				printf("-%d\n", i);
			}
			zuiqin = 1;
		}
	}
	for (int i = 0; i < n; i++) {
		if (mymap[b1][i] > mymap[b1][a1]) {
			zuiqin = 1;
		}
	}
	if (zuiqin == 0) {
		printf("%s %s\n", a, b);
	}
	else {
		printf("%s %s\n", a, b);
		for (int i = 0; i < n; i++) {
			if (i == b1)continue;
			if (mymap[a1][i] == mymap[a1][b1]) {
				printf("%s ", a);
				if (a[0] == '-') {
					printf("%d\n", i);
				}
				else {
					printf("-%d\n", i);
				}
			}
		}
		for (int i = 0; i < n; i++) {
			if (mymap[b1][i] > mymap[b1][a1]) {
				printf("%s ", b);
				if (b[0] == '-') {
					printf("%d\n", i);
				}
				else {
					printf("-%d\n", i);
				}
			}
		}
		for (int i = 0; i < n; i++) {
			if (i == a1)continue;
			if (mymap[b1][i] == mymap[b1][a1]) {
				printf("%s ", b);
				if (b[0] == '-') {
					printf("%d\n", i);
				}
				else {
					printf("-%d\n", i);
				}
			}
		}
	}
}

L2-3插松枝
大模拟题,以后真该画个图出来写,不要过于相信自己的脑子,逻辑缝缝补补就会发现之前的逻辑给你缝错了

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n, m, k;
stack<int> he;
queue<int> tui;
stack<int> ans;
void out() {
	stack<int> temp;
	temp.push(ans.top());
	ans.pop();
	while (!ans.empty())
	{
		temp.push(ans.top());
		ans.pop();
	}
	printf("%d", temp.top());
	temp.pop();
	while (!temp.empty())
	{
		printf(" %d", temp.top());
		temp.pop();
	}
	printf("\n");
}
int main() {

	//he.push(0);
	scanf("%d%d%d", &n, &m, &k);
	for (int i = 0; i < n; i++) {
		int temp;
		scanf("%d", &temp);
		tui.push(temp);
	}
	//tui.push(0);
	while (!tui.empty() || !he.empty())
	{

		if (ans.empty()) {
			if (!he.empty()) {
				ans.push(he.top());
				he.pop();
				if (ans.size() == k) {
					out();
					goto begin1;
				}
			}
			else {
				ans.push(tui.front());
				tui.pop();
				if (ans.size() == k) {
					out();
					goto begin1;
				}
			}
		}
		while (!he.empty() && he.top() <= ans.top())
		{
			ans.push(he.top());
			he.pop();
			if (ans.size() == k) {
				out();
				goto begin1;
			}
		}
		if (tui.empty() && he.empty())break;
		if (tui.empty()) {
			out();
			goto begin1;
		}
		else {
			while (tui.front() > ans.top())
			{
				if (he.size() == m) {
					out();
					goto begin1;
				}
				he.push(tui.front());
				tui.pop();

				if (tui.empty())break;
			}
			if (tui.empty()) {
				//break;
				out();
				goto begin1;
			}
			else {
				ans.push(tui.front());
				tui.pop();
				if (ans.size() == k) {
					out();
					goto begin1;
				}
			}
		}
	begin1:;
	}
	if (!ans.empty()) {
		out();
	}
}

L2-4 哲哲打游戏

这么简单的题放第四个啊啊啊啊啊,为什么,啊啊啊啊啊啊
纯纯模拟,甚至都不搜索一下。

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e5 + 10;
int n, m, now=1;
vector<int> mymap[maxn];
int save[110];
int num_save = 0;
int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; i++) {
		int ki, k;
		scanf("%d", &ki);
		for (int j = 1; j <= ki; j++) {
			scanf("%d", &k);
			mymap[i].push_back(k);
		}
	}

	for (int i = 0; i < m; i++) {
		int a, b;
		scanf("%d%d", &a,&b);
		if (a == 0) {
			now = mymap[now][b-1];
		}
		else if (a == 1) {
			printf("%d\n", now);
			save[b] = now;
		}
		else {
			now = save[b];
		}
	}
	printf("%d\n", now);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值