hdu 4346 The Beautiful Road(思维,枚举,5级)

The Beautiful Road

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 229    Accepted Submission(s): 122


Problem Description
There is a road from city A to city B.On the road,there are N positions(indexed from 0 to N-1).In order to celebrate the Multi-University training,the mayor of city A commands a worker to insert N flags on the N positions.The color of a flag is either red or green.We call the road is beautiful if and only if there exists at least one pair of non-negative integers (a,b) (0<=a<b<N and (a+b) is an even number) such that both a-th flag and b-th flag are red and (a+b)/2-th flag is green.Otherwise we call the road is ugly.Now,some positions have already been inserted flags.In order to make the road beautiful,the worker must carefully insert the flags on the positions which haven't been inserted.He wants to know how many different types of beautiful road he can make.The type of the road only depends on the flags' color.
 

Input
The first line of the input is the number of cases. On each case there is a line consists of a string.The length of the string is N.(0<=N<=800).The i-th character of the string is 'R' or 'G' or '?'.'R' means the flag on the i-th position which has been inserted is red.'G' means the flag on the i-th position which has been inserted is green.'?' means the i-th position hasn't been inserted a flag.
 

Output
A single line with the number of different types of road the worker can make, modulo 1,000,000,007.
 

Sample Input
  
  
4 ?G RG? ??? ????
 

Sample Output
  
  
0 1 1 4
 

Author
HIT
 

Source
 

Recommend
zhuyuanchen520


思路:beautiful串数=总串数-非butiful串数

         而非beautiful串的形式必然为:G..GR...R...R...RG..G,相邻2R的距离相等且距离为奇

     证明不难,反证法,假设其中有一对相邻距离为偶数,则必能找到中间的G

    假设相邻的R距离不等,则此边界的R符合条件,并且能找到G。

剩下的枚举R的可能起点,和R间的距离,这题就水了。


#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int mm=808;
const long long mod=1000000007;
int cas,R_all,R,num;
long long ans;
char s[mm];
int main()
{
    while(~scanf("%d",&cas))
    {
        while(cas--)
        {
            num=R=R_all=0;
            scanf("%s",s);
            for(int i=0; s[i]; ++i)
            {
                num+=(s[i]=='?');
                R_all+=(s[i]=='R');
            }
            ans=0;
            int len=strlen(s);
            if(R_all==0)++ans;///全为G的情况
            bool flag;
            for(int i=0; i<len; ++i)
            {
                flag=(s[i]=='R');///起点为R碰到后计算一次就出现所有结果了

                if(s[i]!='G')
                {
                    if(R_all==0)ans=(ans+1)%mod;///前i个都是G,i为R,后i位是G,
                    if(R_all==1&&s[i]=='R')ans=(ans+1)%mod;///前面全是G,i位后面全是G,
                    for(int j=1; j+i<len; j+=2) ///相邻R的最小距离
                    {
                        R=(s[i]=='R');
                        for(int k=i+j; k<len; k+=j) ///连续的下一个
                        {
                            if(s[k]=='G')break;///后面必须都是G了,这种已经算过了
                            if(s[k]=='R')R++;
                            if(R==R_all)ans=(ans+1)%mod;///前i个是G,k位后面全是G,RG中间交替
                        }
                    }
                }
                if(flag)break;
            }
            long long ret=1;
            for(int i=0; i<num; ++i)
                ret=(ret*2)%mod;
            ans=(ret-ans+mod)%mod;
            printf("%I64d\n",ans);
        }
    }
}




在园区网建设过程中,我们常常面临诸多实际挑战,例如网络设计、IP规划、成本控制以及项目管理等。而名为“园区网的真实案例.zip”的压缩包文件提供了大量实用资源,包括真实园区网案例、综合实验拓扑图、相关脚本和项目需求分析等,这些资料对于理解和实践园区网建设具有重要意义。我们重点关注其中的“园区网综合实验”部分。 园区网是在学校、企业或政府机构等相对封闭区域内构建的网络,旨在为区域内用户提供高效、安全的数据通信服务。综合实验则是为了模拟真实环境,帮助学习者掌握园区网设计的关键技术和步骤,通常涵盖网络设备选择与配置、VLAN划分、路由协议应用、QoS策略设定以及安全防护措施等内容。压缩包中的“最终”文件可能包含了项目实施的最终成果,如经过验证的网络设计方案、配置脚本或项目总结报告,这些资料有助于我们将理论知识转化为实际可执行的方案。 “命令”文件则可能包含了用于配置网络设备的CLI指令,涉及交换机和路由器的基本配置,如VLAN设置、端口安全、静态路由或动态路由协议(如OSPF、RIP等)。通过研究这些命令,我们可以学习如何根据不同场景正确配置网络设备,以满足业务需求。 IP规划是园区网建设中的关键任务,合理的IP规划能够避免地址冲突,便于管理和维护。案例中可能会展示如何根据园区规模、功能区划分及未来扩展需求制定合适的IP地址策略。成本控制同样重要,园区网建设不仅涉及设备购置费用,还包括安装、运维、升等长期成本。案例可能探讨如何在满足功能需求的同时,选择性价比高的设备,优化布线方案,并通过节能技术降低运营成本。 项目总结则是对整个实施过程的回顾,涵盖遇到的问题、解决方案、经验教训及改进点,对提升项目管理能力和问题解决技巧非常有帮助。这个压缩包的内容全面覆盖了园区网设计、建设和管理的多个方面,是学习和实践网络技术的宝贵资源。通过深入研究这些材料,我们可以提升网络规划和实施能力,更好
内容概要:本文档《Grafana运维指南:从入门到精通》详细介绍了Grafana这一开源度量分析和可视化工具的各个方面。首先解释了Grafana在数据监控和分析中的重要性,强调其开源、可视化、多数据源支持、告警功能、灵活的仪表盘管理和丰富的插件生态系统等特点。接着,文档逐步讲解了Grafana的安装与配置,包括系统准备、初始配置和数据源配置等步骤。随后,深入探讨了数据源管理、仪表盘操作、插件使用等核心功能,提供了详细的配置和使用指南。最后,文档介绍了性能优化、安全管理、日志分析等日常运维要点,并通过一个实际案例展示了Grafana在大型电商平台运维中的应用价值。 适用人群:适用于运维人员、系统管理员、开发人员以及任何需要进行数据监控和分析的专业人士,尤其是那些对Grafana有一定了解或有兴趣深入了解的人群。 使用场景及目标:①帮助用户掌握Grafana的安装配置和基本使用方法;②指导用户如何整合多种数据源,创建和管理仪表盘;③提供性能优化、安全管理等方面的建议,确保Grafana在实际应用中的高效稳定运行;④通过实际案例分享,展示Grafana在复杂业务环境中的应用效果,提升用户对Grafana的理解和应用能力。 其他说明:本文档不仅涵盖了Grafana的基础知识和技术细节,还结合实际案例,帮助读者更好地理解和应用Grafana。建议读者在学习过程中结合实际操作,通过实践加深对Grafana的理解。此外,文档鼓励读者参与社区交流,分享经验和心得,共同进步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值