P1101

回复帖子

@min_进击的灭霸 2019-06-12 09:53 回复

为什么这个代码会wa???

第一个测试点的testdata.out和我程序里freopen出的1.out对拍出来一模一样!

无语。。。

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int x, y;
}point[10];
int n, used[101][101];
char a[101][101];
char s[] = "yizhong";
int dx[8] = {0, 0, 1, -1, 1, -1, -1, 1};
int dy[8] = {1, -1, 0, 0, -1, 1, -1, 1};
void dfs(int aa, int bb, int k, int u)
{
    if(u == 7)
    {
        for(int i = 0; i < 7; i++)
            used[point[i].x][point[i].y] = 1;
        return ;
    }
    if(u == 6 || a[aa+dx[k]][bb+dy[k]] == s[u+1])
    {
        point[u].x = aa, point[u].y = bb;
        dfs(aa+dx[k], bb+dy[k], k, u + 1);
    }
}
int main()
{
    freopen("1.txt", "w", stdout);
    std::ios::sync_with_stdio(false);
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            cin>>a[i][j];
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            if(a[i][j] == 'y')
                for(int k = 0; k < 8; k++)
                    if(a[i+dx[k]][j+dy[k]] == 'i') dfs(i, j, k, 0);
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            if(used[i][j] == 1) printf("%c", a[i][j]);
            else printf("*");
        }
        printf("\n");
    }
    return 0;
}

有什么问题吗?求助

@2017BeiJiang 2019-06-12 09:59 回复 举报

@min_进击的灭霸,我也不知道,不过我可以给你一个暴力代码。

// luogu-judger-enable-o2
#include<iostream>
#include<cstring>
using namespace std;
char a[101][101];
int n,f[101][101]; 
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    cin>>a[i][j];
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
        int k=0;
        if(a[i][j]=='y')
        {
            if(j+6<=n&&a[i][j+1]=='i'&&a[i][j+2]=='z'&&a[i][j+3]=='h'&&a[i][j+4]=='o'&&a[i][j+5]=='n'&&a[i][j+6]=='g') 
            {f[i][j]=f[i][j+1]=f[i][j+2]=f[i][j+3]=f[i][j+4]=f[i][j+5]=f[i][j+6]=1;}

            if(j+6<=n&&i+6<=n&&a[i+1][j+1]=='i'&&a[i+2][j+2]=='z'&&a[i+3][j+3]=='h'&&a[i+4][j+4]=='o'&&a[i+5][j+5]=='n'&&a[i+6][j+6]=='g')
            {f[i][j]=f[i+1][j+1]=f[i+2][j+2]=f[i+3][j+3]=f[i+4][j+4]=f[i+5][j+5]=f[i+6][j+6]=1;}

            if(j+6<=n&&i-6>=1&&a[i-1][j+1]=='i'&&a[i-2][j+2]=='z'&&a[i-3][j+3]=='h'&&a[i-4][j+4]=='o'&&a[i-5][j+5]=='n'&&a[i-6][j+6]=='g')
            {f[i][j]=f[i-1][j+1]=f[i-2][j+2]=f[i-3][j+3]=f[i-4][j+4]=f[i-5][j+5]=f[i-6][j+6]=1;}

            if(i+6<=n&&a[i+1][j]=='i'&&a[i+2][j]=='z'&&a[i+3][j]=='h'&&a[i+4][j]=='o'&&a[i+5][j]=='n'&&a[i+6][j]=='g')
            {f[i][j]=f[i+1][j]=f[i+2][j]=f[i+3][j]=f[i+4][j]=f[i+5][j]=f[i+6][j]=1;}

            if(i-6>=1&&a[i-1][j]=='i'&&a[i-2][j]=='z'&&a[i-3][j]=='h'&&a[i-4][j]=='o'&&a[i-5][j]=='n'&&a[i-6][j]=='g')
            {f[i][j]=f[i-1][j]=f[i-2][j]=f[i-3][j]=f[i-4][j]=f[i-5][j]=f[i-6][j]=1;}    

            if(j-6>=1&&a[i][j-1]=='i'&&a[i][j-2]=='z'&&a[i][j-3]=='h'&&a[i][j-4]=='o'&&a[i][j-5]=='n'&&a[i][j-6]=='g') 
            {f[i][j]=f[i][j-1]=f[i][j-2]=f[i][j-3]=f[i][j-4]=f[i][j-5]=f[i][j-6]=1;}                    

            if(j-6>=1&&i-6>=1&&a[i-1][j-1]=='i'&&a[i-2][j-2]=='z'&&a[i-3][j-3]=='h'&&a[i-4][j-4]=='o'&&a[i-5][j-5]=='n'&&a[i-6][j-6]=='g')
            {f[i][j]=f[i-1][j-1]=f[i-2][j-2]=f[i-3][j-3]=f[i-4][j-4]=f[i-5][j-5]=f[i-6][j-6]=1;}

            if(j-6>=1&&i+6<=n&&a[i+1][j-1]=='i'&&a[i+2][j-2]=='z'&&a[i+3][j-3]=='h'&&a[i+4][j-4]=='o'&&a[i+5][j-5]=='n'&&a[i+6][j-6]=='g')
            {f[i][j]=f[i+1][j-1]=f[i+2][j-2]=f[i+3][j-3]=f[i+4][j-4]=f[i+5][j-5]=f[i+6][j-6]=1;}
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(!f[i][j]) cout<<"*";
            else cout<<a[i][j];
        }
        cout<<endl;
    }

}
@夏菡德佑 2019-06-12 15:34 回复 举报
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct save
{
    int nnx,nny;
};
save sa[7];
char ans[7]={'y','i','z','h','o','n','g'};
char map[101][101];
bool vis[101][101]={0};
int mx[8]={-1,1,0,0,-1,1,-1,1},my[8]={0,0,-1,1,-1,-1,1,1},n;
void dfs(int x,int y,int m,int law)
{
    int i,j,nx,ny;
    sa[m].nnx=x;
    sa[m].nny=y;
    if(m==6)
    {
        for(i=0;i<7;i++)
        {
            vis[sa[i].nnx][sa[i].nny]=1;
        }
        return;
    }
    if(law!=-1)
    {
        nx=x+mx[law];
        ny=y+my[law];
        if(nx<0||nx>=n||ny<0||ny>=n)
        return;
        if(map[nx][ny]==ans[m+1])
        dfs(nx,ny,m+1,law);
    }
    else
    {
        for(i=0;i<8;i++)
        {
            nx=x+mx[i];
            ny=y+my[i];
            if(nx<0||nx>=n||ny<0||ny>=n)
            continue;
            if(map[nx][ny]==ans[m+1])
            {
                dfs(nx,ny,m+1,i);
            }       
        }
    }
}
int main()
{
    std::ios::sync_with_stdio(false);
    int j,i,k;
    cin>>n;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cin>>map[i][j];
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(map[i][j]=='y')
            dfs(i,j,0,-1);
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(!vis[i][j])
            map[i][j]='*';
            putchar(map[i][j]);
        }
        putchar('\n');
    }
    return 0;
}

我的貌似没那么暴力,只是平凡的dfs

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。