zoukankan      html  css  js  c++  java
  • Gym

    题意:将一个沙发放到一个分成好几个色块(一个字母代表一种颜色)的房间里,要求沙发染成跟所在色块一样的颜色,沙发分成(0,1)两种,0可以染成一种颜色,1可以染成一种颜色(换句话说,沙发最多两种颜色),放的方向无所谓(可以正放,可以倒放)。求有几个放置的位置。
    题解:由于找的色块是连续区域,所提还是比较好找的,用两个字符来标记01沙发的颜色,然后逐个比较,如果后面的色块颜色跟已经染的颜色不一样则不能放下,如果放下了讲该位置标记,然后将字符串逆置再比较一次,此时已经标记过的点要跳过(防止一个点计算两次)。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <map>
    
    using namespace std;
    
    void ff(char s[])
    {
        int n,i;
        n = strlen(s);
        for(i=0;i<n/2;i++)
            swap(s[i],s[n-i-1]);
    }
    
    int main()
    {
        char s[2050],t[2050],x,y;
        int m,n,i,j,num,k,f[2050];
        scanf("%s%s",s,t);
        memset(f,0,sizeof(f));
        n = strlen(s);
        m = strlen(t);
        num = 0;
        for(i=0;i<n;i++)
        {
            x = y = 0;
            for(j=0,k=i;k<n&&j<m;k++,j++)
            {
                if(t[j]=='0')
                {
                    if(x==0)
                        x = s[k];
                    else
                    {
                        if(x!=s[k])
                            break;
                    }
                }
                else if(t[j]=='1')
                {
                    if(y==0)
                        y = s[k];
                    else
                    {
                        if(y!=s[k])
                            break;
                    }
                }
            }
            if(j==m)
            {
                num++;
                f[i] = 1;
            }
            if(k==n)
                break;
        }
        ff(t);
        for(i=0;i<n;i++)
        {
            if(f[i])
                continue;
            x = y = 0;
            for(j=0,k=i;k<n&&j<m;k++,j++)
            {
                if(t[j]=='0')
                {
                    if(x==0)
                        x = s[k];
                    else
                    {
                        if(x!=s[k])
                            break;
                    }
                }
                else if(t[j]=='1')
                {
                    if(y==0)
                        y = s[k];
                    else
                    {
                        if(y!=s[k])
                            break;
                    }
                }
            }
            if(j==m)
                num++;
            if(k==n)
                break;
        }
        printf("%d
    ",num);
        return 0;
    }
    
  • 相关阅读:
    require.js+bootstrap实现简单的页面登录和页面跳转
    require.js疑惑
    汉子转拼音(不支持多音字)
    require.js入门
    CSS+transform画动态表情
    nodejs的简单爬虫
    根据选择的省市区自动匹配邮政编码
    node将excel内容转json
    js实现省市区联动
    sql server 作业收缩数据库
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/9895993.html
Copyright © 2011-2022 走看看