[CSP-S模拟测试]:Set(随机化)

题目描述

你手上有$N$个非负整数,你需要在这些数中找出一个非空子集,使得它的元素之和能被$N$整除。如果有多组合法方案,输出任意一组即可。
注意:请使用高效的输入输出方式避免输入输出耗时过大。


输入格式

第一行一个整数$N$,代表数字个数。
接下来一行$N$个数,代表你手上的数。


输出格式

如果无解,输出$-1$。
否则,第一行输出一个整数$M$,代表你选择的数的个数。
接下来一行$M$个数,代表你选中元素的下标,这$M$个数必须两两不同。


样例

样例输入:

3
4 6 10

样例输出:

1
2


数据范围与提示

对于$20\%$的数据,$N\leqslant 20$。
对于$50\%$的数据,$N\leqslant 1,000$。
对于$100\%$的数据,$N\leqslant 1,000,000$,数字大小不超过${10}^9$。


题解

再一次没有打整洁……

有这样一个结论,对于一个序列,如果有一段的和$\mod N$为$0$,那么无论怎么打乱序列都会存在这么一段;如果没有,无论怎么打乱还是没有。

具体为什么我也不会证明,考场上用这个结论$A$掉这道题的也说不上来(我都不知道他们是怎么$A$的……)

所以我们可以记录一下每个模数出现的位置,如果已经出现过了直接输出这一段就好了。

然而考场上我并没有这么做,$random_shuffle$随机打乱序列,然后看前缀和$\mod N$是否为$0$,如果有则输出这些数。

当时以为自己只能拿$20$分,于是打了一个比正解还难搞的$50$分的$DP$,考完之后……

我的天!!!$Accepted$,当时就懵了……

所以考场上乱搞还是有很大帮助的。

时间复杂度:$\Theta($玄学$)$(实际上挺小的)。

期望得分:$100$分(其实考场上以为只有$20$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n;
pair<int,int> a[1000001];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i].first);
		a[i].first%=n;
		a[i].second=i;
		if(!a[i].first){printf("1\n%d",i);return 0;}
	}
	srand(time(NULL));
	while(1)
	{
		random_shuffle(a+1,a+n+1);
		int sum=0;
		for(int i=1;i<=n;i++)
		{
			sum=(sum+a[i].first)%n;
			if(!sum)
			{
				printf("%d\n",i);
				for(int j=1;j<=i;j++)
					printf("%d ",a[j].second);
				return 0;
			}
		}
	}
	return 0;
}

rp++

转载于:https://www.cnblogs.com/wzc521/p/11566817.html

### CISCN EasyCMS 比赛题目解题思路及相关资源 #### 易受攻击的Web应用程序概述 EasyCMS 是一种用于网络安全竞赛中的易受攻击的Web应用平台,旨在帮助参赛者理解和掌握常见的Web安全漏洞及其利用方法。这类平台通常包含了SQL注入、XSS跨站脚本攻击等多种类型的漏洞。 #### SQL注入漏洞分析防护措施 在处理用户输入的据时未做充分验证的情况下,可能会导致SQL注入风险。对于此类问题,建议采用预编译语句来构建查询命令,并严格过滤特殊字符以防止恶意代码执行[^1]。 ```sql -- 使用参化查询防范SQL注入 PREPARE stmt FROM 'SELECT * FROM users WHERE username=? AND password=?'; EXECUTE stmt USING @username, @password; DEALLOCATE PREPARE stmt; ``` #### 文件上传漏洞检测修复策略 当允许文件上传功能存在缺陷时,攻击者可能上传含有恶意脚本或其他危险内容的文件到服务器上运行。因此,在接收任何来自用户的文件之前都应当仔细检查其扩展名以及MIME类型等属性,确保只接受预期格式的安全文件[^2]。 #### XSS防御机制探讨 为了有效抵御反射型或存储型XSS攻击,除了要对输出据进行HTML实体编码外,还应该设置HTTP头`Content-Security-Policy` (CSP),从而进一步限制页面加载外部资源的能力并阻止潜在危害的发生[^3]。 ```http // 设置严格的CSP政策 Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://apis.google.com; object-src 'none'" ``` #### CSRF保护方案设计 针对CSRF(跨站点请求伪造),可以通过引入随机Token作为每次表单提交的一部分来进行身份验证;另外还可以考虑实施SameSite Cookie属性,减少其他域下的自动携带cookie行为所带来的威胁[^4]。 ```php <?php session_start(); ?> <!-- PHP端生成唯一token --> <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>"> // JavaScript中读取Cookie函示例 function getCookie(name){ var matches = document.cookie.match(new RegExp("(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)")); return matches ? decodeURIComponent(matches[1]) : undefined; } ``` #### 参考学习材料推荐 - OWASP官方指南:提供关于如何识别和缓解各种常见web应用程序安全性问题的最佳实践指导。 - 渗透测试框架Metasploit:可用于模拟真实世界的黑客活动场景,加深理解实际操作过程中的技术细节。 - HackTheBox / TryHackMe在线CTF平台:拥有大量高质量挑战项目供爱好者们练习提升技能水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值