2022“杭电杯”中国大学生算法设计超级联赛(2)

  1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012
赛时过题 O O O       O   O     O
赛后补题                       1

赛后感悟:

真没想到1003是一道披着难题的水题!暴力就能过!数据太水了!

有时候不要不敢交暴力,如果无论怎么都想不出正解且暴力复杂度感觉有机会卡过去那就试一下!

另外1011是真的没想到思路,真的不该花那么多时间去啃1011,1004和1008可能还更有机会一点。

总的来说,比赛前2小时一定要把所有题全部看一遍!不要死啃一道题一直到3小时以后还没看其他题!太晚开题的话思考题目的时间就不够了!

今天这场在比赛最后1个多小时一直在考虑1003,1011,可惜了,如果去做1004、1008可能就做出来了,不过比之前有进步,不会一直卡在同一题一直到比赛结束了!

赛时排名情况:

7题末尾:129名

8题末尾:79名

9题末尾:52名


1002 C++ to Python

题目难度:check-in

题目大意:删除字符串中的所有set::make_typle,然后输出

题目解析:读到's'就跳过15个字符

参考代码:

查看代码
#include<iostream>
#include<cstdio>
#include<cstring>
const int N=10000;
char s[N];
int main()
{
	int T;scanf("%d",&T);
	while (T--)
	{
		scanf("%s",s+1);int len=strlen(s+1);
		int now=1;
		while (now<=len)
		{
			if (s[now]=='s') now+=15;
			else putchar(s[now++]);
		}putchar('\n');
	}
	return 0;
}

1012 Luxury cruise ship

题目难度:easy

题目大意:T组数据。给一个数N,问这个数能否由若干7、31、365累加得到。

数据范围:T<=1000,1<=N<=1018

题目解析:考虑完全背包,但是N太大了。

再考虑贪心,将N不断减去365一直缩小到可接受范围再背包。

赛时经历:宇彬迅速发现可以把N对7*31*365取模,然后对0~7*31*365-1完全背包。

实际上这个做法会被hack,不过数据太水了我们就过了hhhh

参考代码(正解版):(待补)


1009 ShuanQ

题目难度:easy

题目大意:给定P,Q,encrypted_data,找出满足条件的质数M,满足M>max{P,Q,encrypted_data}且P*Q≡1(mod M),输出raw_data=encrypted_data*Q (mod M)

题目解析:P*Q≡1(mod M) 即 P*Q-1≡0(mod M) 即 P*Q-1是M的倍数  即 M是P*Q-1的因子

又要求M是质数,则找出P*Q-1的大于max{P,Q,encrypted_data}的质因子M即可

参考代码:

查看代码
 #include <bits/stdc++.h>
#define x first
#define y second 
#define int long long
using namespace std;
const int N = 2e6+10;
typedef long long LL;
typedef pair<int, int> PII;
int n, m, k, T;
bool st[N];
int prime[N], cnt;

signed main() {
	for (int i = 2; i < N; i++) {
		if (!st[i]) {
			prime[cnt++] = i;
		}
		for (int j = 0; j < cnt&&prime[j] * i < N; j++) {
			st[i*prime[j]] = 1;
			if (i%prime[j] == 0)break;
		}
	}
	int p, q, e;
	int T;
	cin >> T;
	while (T--) {
		cin >> p >> q >> e;
		LL k = p * q - 1;
		int f = 0;
		for (int i=0; i <cnt; i++) {
			int j = prime[i];
			if (k%j == 0 ) {
				if (j > max(p, max(q,e))) {
					f = j;
					break;
				}
				else {
					while (k%j == 0)k /= j;
				}
				
			}
		}
		if (!f) {
			if (k != 1) {
						if (k > max(p, max(e,q)))f = k;
					}
		}
		
		if (!f)puts("shuanQ");
		else cout << e * q%f<<endl;
	}
	
}

1007 Snatch Groceries

题目难度:easy

题目大意:在抢菜时客户端会向服务端发送请求,由于网络延迟及不同机器时钟不同步(每台机器需要定时通过NTP网络协议和某台有精准时间的服务器进行同步),服务器无法准确确定客户端什么时候发出请求,只能够确定一个时间区间保证客户端请求时间较大概率落于该区间内。

服务端将所有时间区间按时间顺序进行处理,一旦发现某两个时间区间有交集则终止程序。询问在程序终止前能处理几个客户端请求(一个请求对应一个时间区间)?

题目解析:最大的难点是超长的阅读理解,实际上只有最后两段是有用的。

按左端点排序所有时间区间,如果ri>=li+1,则发现了第一对有交集区间,服务端立刻终止程序。

参考代码:

查看代码
 /*#if(__cplusplus == 201103L)
#include <unordered_map>
#include <unordered_set>
#else
#include <tr1/unordered_map>
#include <tr1/unordered_set>
namespace std
{
    using std::tr1::unordered_map;
    using std::tr1::unordered_set;
}
#endif*/
#include<bits/stdc++.h>
using namespace std;
long long T,n;
struct tu{
	long long l,r;
}e[101000];
bool cmp(tu a,tu b)
{
	return a.l<b.l;
}
int main()
{
	cin>>T;
	while(T--)
	{
		cin>>n;
		for(long long i=1;i<=n;i++)
		{
			scanf("%lld%lld",&e[i].l,&e[i].r);
		}
		sort(e+1,e+1+n,cmp);
		long long ans=0;
		for(long long i=1;i<=n;i++)
		{
			if(i==n)
			{
				ans++;
			}
			else
			{
				if(e[i+1].l<=e[i].r)
				{
					break;
				}
				else
				{
					ans++;
				}
			}
		}
		printf("%lld\n",ans);
	}
	return 0;
 }

1001 Static Query on Tree

题目大意:

 


1003 Copy

题目大意:

 


1004 Keychains

题目大意:

 


1005 Slayers Come

题目大意:

 


1008 Keyboard Warrior

题目大意:

 


1011 DOS Card

题目大意:

 


 

posted @   th-is  阅读(150)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示