CTF计算机认证试题201909-2:小明种苹果(续)

这篇博客讨论了一种使用数组表示环形排列树木并判断连续三棵树是否掉落苹果的问题。代码示例中,作者通过循环检查大部分情况,并额外处理了首尾相连的特殊情况,从而确保所有可能的连续三棵树组合都被考虑。最后,代码输出了总共的苹果数、掉落苹果的树的数量以及连续三棵掉落苹果的组合数。

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

在这里插入图片描述在这里插入图片描述
本题要注意树是围成一圈的,而我使用的是数组。判断连续三棵树时需要单独查看第1,2,N和第1,N-1,N的情况,例如假如有六棵树按如下方式排列。
1 2
6 3
5 4

通过循环只能判断123,234,345,456,而无法直接判断612,561.

for(int i=1;i<N-1;i++){
	if(tree[i-1].combine!=0&&tree[i].combine!=0&&tree[i+1].combine!=0)	//判断连续三棵树掉落苹果 
		E++;
}

因此我采用两个if语句单独判断这两种情况。

if(tree[0].combine!=0&&tree[1].combine!=0&&tree[N-1].combine!=0)	E++;	//一圈树,单独判断两种情况 
if(tree[0].combine!=0&&tree[N-1].combine!=0&&tree[N-2].combine!=0)	E++;

满分代码:

#include<iostream>
using namespace std;
struct node{
	int num,ans[1000],sum,combine;
	tree(){
		combine=0;
	}
}tree[1000];
int main(){
	int N,m[1000],D=0,T=0,E=0;
	cin>>N;
	for(int i=0;i<N;i++){
		cin>>m[i]>>tree[i].num;					//记录操作次数和树上苹果数 
		for(int j=0;j<m[i]-1;j++){
			cin>>tree[i].ans[j];
			if(tree[i].ans[j]>0){	
				if(tree[i].ans[j]<tree[i].num){				//查看是否有苹果掉落 
					tree[i].combine++;
				}
				tree[i].num=tree[i].ans[j];							//重新记录后清空疏果数 
			}
			else{
				tree[i].num+=tree[i].ans[j];				//每次疏果后更新树上苹果数量 
			}
		}
		T+=tree[i].num;						//苹果总数 
	}
	for(int i=1;i<N-1;i++){
		if(tree[i-1].combine!=0&&tree[i].combine!=0&&tree[i+1].combine!=0)	//判断连续三棵树掉落苹果 
			E++;
	}
	if(tree[0].combine!=0&&tree[1].combine!=0&&tree[N-1].combine!=0)	E++;	//一圈树,单独判断两种情况 
	if(tree[0].combine!=0&&tree[N-1].combine!=0&&tree[N-2].combine!=0)	E++;
	for(int i=0;i<N;i++)
		if(tree[i].combine!=0)	D++;				//判断有几棵树掉落苹果 
	cout<<T<<" "<<D<<" "<<E;
	return 0;
}


### CTF竞赛中X-Forwarded-For头设置为127.0.0.1的影响 在CTF竞赛环境中,当`X-Forwarded-For` (XFF) 头被设置为 `127.0.0.1` 时,这可能表明存在特定的安全漏洞或配置错误。Nginx服务器配置中的反向代理部分显示了如何处理来自客户端的真实IP地址: ```nginx proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ``` 如果应用程序依赖于这些头部来识别用户的实际IP地址,则可能会受到欺骗攻击影响[^1]。 #### 安全风险分析 由于XFF头是由客户端提供的数据,在未经过适当验证的情况下信任此值可能导致安全问题。特别是对于内部网络资源访问控制机制而言,将XFF设为本地回环地址 (`127.0.0.1`) 可能会让恶意用户绕过某些基于源IP的安全策略[^2]。 #### 利用场景探讨 考虑到SQL注入的可能性,可以通过命令行工具如sqlmap尝试利用这一特性进行渗透测试: ```bash sqlmap -u "http://target_url" --headers="X-Forwarded-For:127.0.0.1" --dbs --batch ``` 上述命令用于探测目标站点是否存在可利用的SQL注入点,并指定自定义HTTP请求头以模拟合法内网流量。需要注意的是,这种行为仅限于授权范围内的安全评估活动[^3]。 #### 防范措施建议 为了防止此类攻击的发生,开发人员应当采取以下预防措施: - 不要单纯依靠不可信输入(例如 HTTP 请求头)作为身份验证依据; - 实施严格的输入校验逻辑,过滤掉异常情况下的 IP 地址; - 使用更可靠的方法获取访客的真实 IP ,比如直接读取远程地址 `$remote_addr` 而不是通过中间件传递过来的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值