2021-10-30(1)

1,A. Two Subsequences-Codeforces Round #751 (Div. 2)
题意:给定一个字符串s,要求构建两个字符串a,b。s中的元素只可能属于ab中的一个。a的字典序是所有情况中字典序最小的一个,b是任意字符串。
题解:找到s中ASCII码最小的字母,这个字符是a,然后b是其余的字符。

#include<iostream>
#include<string>
using namespace std;
string x;
int n,m;
int i1,i2,i3,i4,i5;
char c;
 
int main()
{
    int t;
    cin >> t;
    while(t--)
    {
    cin >> x;
    
    for(i1=0;i1<x.size();i1++)
    {
    if(i1==0) c=x[i1];
    else if(x[i1]<c) c=x[i1];
    }
    cout <<c<<" ";
    for(i1=0;i1<x.size();i1++)
    {
    if(x[i1]==c) c='&';
    else cout <<x[i1];
    }
    
    cout <<endl;
    }    
    return 0;
}

总结:要使字符串的字典序最小,首先考虑的是字符串的元素个数。
2,B. Divine Array-Codeforces Round #751 (Div. 2)
题意,一个数组中有n个整数,将进行下面的操作无限次。数组第i个元素的值变为数组被改变之前第i个元素的值在数组中出现的次数。
题解:暴力。(按照题意打就行)

#include <iostream>
#include <map>
#include <algorithm>
#include <cstdio>
using namespace std;
const int size1=100000;
int n,m,max1,min1;
int i1,i2,i3,i4,i5,i6;
int p2[size1+10];
short q[size1+10],p1[size1+10],a[5000][2010];
map<int,int> it;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        max1=0;
        it.clear();
        cin>>n;
        for(i1=1;i1<=n;i1++)
        {
            scanf("%d",&a[0][i1]);
            it[a[0][i1]]++;
        }
        cin>>m;
        for(i2=1;i2<=m;i2++)
        {
            scanf("%d%d",&p1[i2],&p2[i2]);
            max1=max(max1,p2[i2]);
        }
 
        i1=1;
        while(i1<=max1)
        {
            i3=0;
            for(i2=1;i2<=n;i2++)
            {
                a[i1][i2]=it[a[i1-1][i2]];
                if(a[i1][i2]==a[i1-1][i2]) i3++;
                if(i3==n) goto L;
            }
            it.clear();
            for(i2=1;i2<=n;i2++)
            {
                it[a[i1][i2]]++;
            }
            i1++;
        }
        L:;
        for(i2=1;i2<=m;i2++)
        {
            if(p2[i2]>=i1) cout<<a[i1-1][p1[i2]]<<endl;
            else cout<<a[p2[i2]][p1[i2]]<<endl;
        }
    }
    return 0;
}

注意,数组别开太大,虽然会求100000步以后的值,但是数组没必要开这么大,开到5000就可以了。
3,A. Windblume Ode-Codeforces Round #749 (Div. 1 + Div. 2, based on Technocup 2022 Elimination Round 1)
题意:一个数组n个整数。如果存在1<y<x,x%y==0,则x是合成数。找出数组的一个子集的元素和sum,使得sum为合成数,并且子集的元素个数最大。
题解:首先打表求出1-20000内的质数。把数组中所有元素求和,如果不是质数,直接输出n个下标,如果是质数,找到一个数组中的元素为奇数的下标,除了这个下标不输出,别的都输出。

#include<iostream>
#include<cmath>
#include<math.h>
using namespace std;
int a[20010],b[105];
int n,m,sum;
int i1,i2,i3,i4,i5;
int main()
{
    for(i1=2;i1<=sqrt(20010);i1++)
    if(a[i1]!=1 )
    for(i2=2;i2*i1<=20010;i2++)
    a[i1*i2]=1;
    int t;
    cin >> t;
    while(t--)
    {
    cin >> n;
    sum=0;
    for(i1=1;i1<=n;i1++)
    {cin >> b[i1];
    sum+=b[i1];}
    if(a[sum]==1) 
    {
    cout <<n << endl;
    for(i1=1;i1<=n;i1++)
    cout <<i1<<" ";
    cout << endl;
    }
    else 
    {
    cout<<n-1<<endl;
    int flag=0;
    for(i1=1;i1<=n;i1++)
    {
    if(b[i1]%2==0) cout <<i1<<" ";
    else if(flag==0) flag=1;
    else cout<<i1<<' ';
    }
    cout <<endl;
    }
    
    }
    return 0;
}

解释:(1)最多100个数,每个数最多200所以20000(2)如果是质数说明肯定是一个奇数,说明数组元素中有奇数,直接少输出这一个奇数就可以了。
总结:这题注释上面显示以一个比赛为基础,确实有点感觉了(题目翻译太难了)。同学们别问我为啥不做后面的题了,不会做。(>﹏<)

03-19
### IEEE 802.1Q VLAN Tagging Protocol Standard IEEE 802.1Q 是支持虚拟局域网(VLAN)的标准协议之一,通常被称为 Dot1q。该标准定义了一种用于以太网帧的 VLAN 标记系统以及交换机和桥接器处理这些标记帧的操作流程[^2]。 #### 协议结构概述 IEEE 802.1Q 的核心功能在于通过在以太网数据帧中插入特定字段来实现 VLAN 标签的功能。这种标签使得网络设备能够识别哪些流量属于哪个 VLAN,并据此执行转发决策。具体来说: - **Tag Header**: 在原始以太网帧头部增加了一个额外的 4 字节字段作为 VLAN 标签头。这四个字节包含了以下部分: - **Priority Code Point (PCP)**: 使用 3 比特表示优先级级别,范围从 0 到 7,主要用于 QoS 控制。 - **Canonical Format Indicator (CFI)**: 这是一个单比特位,在传统以太网环境中设置为零。 - **VLAN Identifier (VID)**: 使用 12 比特标识具体的 VLAN ID,理论上可以支持多达 4096 个不同的 VLAN(编号从 0 至 4095),其中某些特殊值保留给内部用途或管理目的。 #### 数据包处理机制 当一个带有 VLAN tag 的数据包进入支持 IEEE 802.1Q 的交换机时,它会依据此标签决定如何路由或者过滤该数据流。如果目标端口不属于同一 VLAN,则不会传输至其他无关联的物理接口上;反之亦然——只有相同 VLAN 成员之间才允许互相通信除非经过路由器跨网段访问[^1]。 此外,为了简化管理和配置过程并增强互操作性,还引入了一些辅助性的子协议和服务组件比如 GARP(通用属性注册协议)。GARP 可帮助分发有关 VLAN 成员资格的信息到各个连接节点以便动态调整其行为模式而无需频繁手动干预[^3]。 以下是创建带 VLAN TAG 的 Python 示例代码片段展示如何模拟构建这样的 Ethernet Frame: ```python from scapy.all import Ether, Dot1Q, IP, sendp def create_vlan_packet(src_mac="00:aa:bb:cc:dd:ee", dst_mac="ff:ff:ff:ff:ff:ff", vlan_id=100, src_ip="192.168.1.1", dst_ip="192.168.1.2"): ether = Ether(src=src_mac, dst=dst_mac) dot1q = Dot1Q(vlan=vlan_id) ip_layer = IP(src=src_ip, dst=dst_ip) packet = ether / dot1q / ip_layer return packet packet = create_vlan_packet() sendp(packet, iface="eth0") # Replace 'eth0' with your network interface name. ``` 上述脚本利用 Scapy 库生成包含指定源地址、目的地址及所属 VLAN 编号的数据报文并通过选定的网卡发送出去测试实际效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值