2022.2.27 队内个人训练赛(上)

本文分享了解决四个编程问题的技巧:异或和最大化、GCD条件下的数构造、字符序列平衡和删除元素保持均值。通过实例和代码解析,探讨了算法设计与优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小打了个第一然后就结束前半小时就溜去打短兵了

由于这次每题都来自于不同的场所以就每题来个链接吧

A - To xor or not to xor

传送门Problem - 99999275 - Codeforces

给n个数,求一个字迹使得全部的异或和最大

高斯消元,待补

B - GCD Problem

传送门Problem - 1617B - Codeforces

给一个数n,满足a+b+c=n且gcd(a,b)=c,求a、b、c

首先,令b=k1*c,a=k2*c,则k1+k2=n/c-1,k1和k2互质

因此直接点,c=1(前面都是废话是吧),所以此时a和b要互质

n为偶数时,n-1为奇数,直接构造n-3(>=3)和2,绝对互质

n为奇数时,n-1是偶数,(n-1)/2如果是奇数的话一个-2一个+2,因为a-b=4时,如果他们有公因数只能为2,又因为奇数+2还是奇数所以不可能。如果是偶数的话一个-1一个+1

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t;
	cin >> t;
	long long n;
	while(t--){
		cin >> n;
		n--;
		if(n & 1)
        {
			long long ans = n / 2;
			cout << ans << " " << ans + 1 << " " << 1 << endl;
		} 
        else    
        {
			long long ans = n / 2;
			if(ans & 1)
            {
				cout << ans - 2 << " " << ans + 2 << " " << 1 << endl;
			}
            else
            {
				cout << ans - 1 << " " << ans + 1 << " " << 1 << endl;
			}
		}
	} 
	return 0;
}

C - AB Balance 

传送门:Problem - 1606A - Codeforces

给一串a和b,求最小修改次数使ab个数=ba个数

刚好这题做过,虽然当时是疯狂if的

正解是如果a开头的话(b同理,省略),ab……ba中两个个数相同,中间随便替换多个b为a结果不变,因此只要把首尾俩改成一样的就成

D - Geolocation 

传送门:Problem - 1220G - Codeforces

待补

E - Penalty 

传送门:Problem - 1553C - Codeforces

1表示必进,0表示必不进,?表示可能进也可能不进,给十个字符代表每个球,两支队伍轮流踢,求最少到第几个球可以定输赢

题解:两个循环,第一个循环a遇到?必进,b遇到?必不进,当二者分数差比分数低的那方剩余球数多则输出。同理

#include<iostream>
#include<algorithm>
#include<cmath>

char s[200];
int ab,ba;

using namespace std;
int main()
{
	long long  _,n,m;
	cin >> _;
	while (_--)
	{
		cin >> s;
		int a=0, b=0;
		int a1=5, b1=5;
		int num1=10,num2=10;
		for (int i = 0; i < 10; i++)
		{
			if (s[i] == '1')
			{
				if (i % 2 == 0)
				{
					a++;
				}
				else
				{
					b++;
				}
			}
			if (s[i] == '?')
			{
				if (i % 2 == 0)
				{
					a++;
				}
			}
			if (i % 2 == 0)
			{
				a1--;
			}
			else
			{
				b1--;
			}
			if (a - b > b1)
			{
				num1 = i+1;
				break;
			}
		}
		a=0;b=0;
		a1=5; b1=5;
		num2=10;
		for (int i = 0; i < 10; i++)
		{
			if (s[i] == '1')
			{
				if (i % 2 == 0)
				{
					a++;
				}
				else
				{
					b++;
				}
			}
			if (s[i] == '?')
			{
				if (i % 2 == 1)
				{
					b++;
				}
			}
			if (i % 2 == 0)
			{
				a1--;
			}
			else
			{
				b1--;
			}
			if (b-a > a1)
			{
				num2 = i+1;
				break;
			}
		}cout << min(num1, num2)<<"\n";
	}
}

F - Delete Two Elements 

传送门:​​​​​​Problem - 1598C - Codeforces

给n个元素,求有多少种情况满足删除其中两个元素后平均值不变

首先如果平均值不是整数或者x.5结果都为0,因为删除的两个元素的平均数只能为整数或x.5

因此我们只需要知道每个数对应的被平均数出现过几次就可以了

遇到和平均数相同的数时注意要减去自己

#include<bits/stdc++.h>
using namespace std;
int a[300005];
map <int, int> ma;


int main()
{
	long long  _, n, m=0,k;
	cin >> _;
	while (_--)
	{
		cin >> n;
		ma.clear();
		m=0;
		for (int i = 1; i <= n; i++)
		{
			cin >> a[i];
			m += a[i];
			ma[a[i]]++;
		}
		k = m / n;
		if (m%n!=0)
		{
			if (n % 2 == 1)
			{
				cout << "0\n";
				continue;
			}
			else
			{
				if (k * n + n / 2 != m)
				{
					cout << "0\n";
					continue;
				}
			}
			k = k * 2 + 1;
		}
		else
		{
			k = k * 2;
		}
		long long sum = 0;
		for (int i = 1; i <= n; i++)
		{
			m = k - a[i];
			if (a[i] * 2 == k)
			{
				sum--;
			}
			sum+=ma[m];
		}
		cout << sum / 2<<"\n";
	}
}

图书馆要闭馆了,溜回宿舍了,明天再更新剩余部分

### DASCTF2022 隐秘的角落挑战赛概述 DASCTF2022年举办了多个主题的比赛,其中包括名为“隐秘的角落”的特别挑战赛。此赛事旨在测试参赛者在网络空间安全方面的综合能力,涵盖了逆向工程、密码学、渗透测试等多个领域[^1]。 ### Web题解部分 对于Web类别的题目,“隐秘的角落”提供了独特的场景设置。“gotm”这道题目涉及到了Go语言服务器端模板注入(SSTI)以及JSON Web Token(JWT)伪造漏洞利用。攻击面在于应用程序未正确验证JWT签名,允许恶意用户构造特定载荷来绕过身份认证机制。通过精心设计payload并发送给目标服务,可以实现任意命令执行的效果[^3]。 ```python import jwt import base64 header = {"alg": "HS256", "typ": "JWT"} payload = { 'username': '{{.Env.SHELL}}', } secret = '' # 这里应填入实际使用的密钥 token = jwt.encode(payload, secret, algorithm='HS256', headers=header).decode('utf-8') print(base64.b64encode(token.encode()).decode()) ``` 上述代码展示了如何创建一个带有SSTI有效负载的JWT令牌,并对其进行编码以便于提交至存在缺陷的应用程序接口中。 ### Crypto题解部分 在加密算法方面,“隐秘的角落”引入了一种基于RSA公私钥体系下的特殊情形——当模数n被分解成两个较小质因数p和q时的安全隐患分析。如果选取不当,则可能导致私钥泄露风险增加。针对此类问题,选手需掌握基本的大整数运算技巧及欧拉函数性质应用方法,在已知条件下快速求得d值完成破解过程[^2]。 ### Pwn题解部分 PWN类别聚焦于二进制漏洞挖掘与利用技术训练。一道典型题目要求参与者识别堆溢出错误位置并通过精确控制内存布局达到远程代码执行目的。具体操作包括但不限于寻找合适的gadget链组合、调整栈顶指针指向可控区域等手段达成最终目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值