Codeforces Round# Good Bye 2013 New Year Letter

本文介绍了一道数据规模较小的编程题目,采用暴力求解的方法。通过枚举字符串首尾字符及AC出现次数,利用动态规划计算特定位置的可能性,并最终输出符合条件的字符串组合。

题目描述:戳这里

题解:

这题数据这么小,显然是一道暴力题。
我们枚举一下两个字符串的首和尾是哪个字符,再枚举一下AC的个数,然后DP推一下第k项,判断一下是不是AC总数等于k就好了。
但是细节特别多,代码比较乱。。。。。
代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn=55;
int n,m,k,num,s[maxn],e[maxn];
long long f[maxn];
void prin(char s1,char e1,char s2,char e2,int x1,int x2){
    if (n==1) printf("%c\n",s1); else if (n==2) printf("%c%c\n",s1,e1);
    else {
        printf("%c",s1);
        if (n/2==x1&&n%2==1&&s1=='A') printf("C");
        for (int i=1;i<x1;i++) printf("AC"); if ((n/2!=x1||n%2!=1)&&x1>0) printf("AC");
        for (int i=1;i<=n-2-2*x1;i++) printf("B");
        if (n/2==x1&&n%2==1&&e1=='C') printf("A");
        if (n>1&&(x1!=n/2||(x1==n/2&&n%2==1))) printf("%c\n",e1); else printf("\n");
    }
    if (m==1) printf("%c\n",s2); else if (m==2) printf("%c%c\n",s2,e2);
    else {
        printf("%c",s2);
        if (m/2==x2&&m%2==1&&s2=='A') printf("C");
        for (int i=1;i<x2;i++) printf("AC"); if ((m/2!=x2||m%2!=1)&&x2>0) printf("AC");
        for (int i=1;i<=m-2-2*x2;i++) printf("B");
        if (m/2==x2&&m%2==1&&e2=='C') printf("A");
        if (m>1&&(x2!=m/2||(x2==m/2&&m%2==1))) printf("%c\n",e2);   else printf("\n");
    }
}
bool get(){
    for (int i=3;i<=k;i++){
        s[i]=s[i-2],e[i]=e[i-1];
        f[i]=f[i-2]+f[i-1]+(e[i-2]=='A'&&s[i-1]=='C');
        if (f[i]>num) return 0;
    }
    if (f[k]!=num) return 0; else return 1;
}
int main(){
    scanf("%d %d %d %d",&k,&num,&n,&m);
    for (char x='A';x<='C';x++)
    for (char y='A';y<='C';y++)
    for (char x1='A';x1<='C';x1++)
    for (char y1='A';y1<='C';y1++)
    for (int i=0;i<=n/2;i++)
    for (int j=0;j<=m/2;j++){
        f[1]=i,f[2]=j,s[1]=x,e[1]=y,s[2]=x1,e[2]=y1;
        if (n%2==0&&i==n/2&&(x!='A'||y!='C')) continue;
        if (n%2==1&&i==n/2&&(x!='A'&&y!='C')) continue;
        if (m%2==0&&j==m/2&&(x1!='A'||y1!='C')) continue;
        if (m%2==1&&j==m/2&&(x1!='A'&&y1!='C')) continue;
        if (n==1) e[1]=x; if (m==1) e[2]=x1;
        if (get()) {prin(x,y,x1,y1,i,j); return 0;}
    }
    printf("Happy new year!\n");
    return 0;
}
内容概要:本文档是一份关于交换路由配置的学习笔记,系统地介绍了网络设备的远程管理、交换机与路由器的核心配置技术。内容涵盖Telnet、SSH、Console三种远程控制方式的配置方法;详细讲解了VLAN划分原理及Access、Trunk、Hybrid端口的工作机制,以及端口镜像、端口汇聚、端口隔离等交换技术;深入解析了STP、MSTP、RSTP生成树协议的作用与配置步骤;在路由部分,涵盖了IP地址配置、DHCP服务部署(接口池与全局池)、NAT转换(静态与动态)、静态路由、RIP与OSPF动态路由协议的配置,并介绍了策略路由和ACL访问控制列表的应用;最后简要说明了华为防火墙的安全区域划分与基本安全策略配置。; 适合人群:具备一定网络基础知识,从事网络工程、运维或相关技术岗位1-3年的技术人员,以及准备参加HCIA/CCNA等认证考试的学习者。; 使用场景及目标:①掌握企业网络中常见的交换与路由配置技能,提升实际操作能力;②理解VLAN、STP、OSPF、NAT、ACL等核心技术原理并能独立完成中小型网络搭建与调试;③通过命令示例熟悉华为设备CLI配置逻辑,为项目实施和故障排查提供参考。; 阅读建议:此笔记以实用配置为主,建议结合模拟器(如eNSP或Packet Tracer)动手实践每一条命令,对照拓扑理解数据流向,重点关注VLAN间通信、路由选择机制、安全策略控制等关键环节,并注意不同设备型号间的命令差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值