Day2——搜索(二)广搜

今天上的是广搜。因为座位移了,所以看得更清楚,听得也懂了一些。


深搜就是求解,而广搜是求最优解。所以其实是有很大不同的。
今天的考题,第一题很简单,但是还是有人爆零。我只对了第一题。


第一题——构造回文串

描述:

小A有n种字符,其中第i种字符有ai个,现在小A想知道能否用上他拥
有的所有字符构造一个回文串。输入第一行一个正整数��,接下来一行��个正整数����如题意所述。输出一行YES表示他能做到,NO表示不能。数据规模:对于100%的数据:1 ≤ �� ≤ 100, 1 ≤ ���� ≤ 100。

解:

在读入n之后,循环读入ai,记录ai为奇数的个数有几个。如果奇数个数小于等于1,则输出“YES”,否则输出“NO”。
看思路就是很简单,所以错的都是马虎吧。有的是因为题目没看清,将“YES”“NO”写成了小写,还有的是因为把文件输入输出注释掉,提交的时候没有把斜杠删了。所以要注意啊。
代码:

#include<bits/stdc++.h> 
using namespace std; 
int main()
{
    freopen("palindromic.in","r",stdin);
    freopen("palindromic.out","w",stdout);
    int n,i,j,a,s=0;
    cin>>n;
    for (i=1;i<=n;i++)
    {
        cin>>a;
        if (a%2!=0) s++; 
    } 
    if (s==1||s==0) cout<<"YES"<<endl;
      else if (s>1) cout<<"NO"<<endl; 
    fclose(stdin);
    fclose(stdout);
    return 0;
}

第二题——矩阵编码

题目:

有一个边长为��(�� = 2��)的正方形矩阵,其中元素均为0或1,如下方左图所示。
这里写图片描述

老师说这一题其实没有多大难度。只要把模板套一下就好了。然后在此放上老师的程序:

#include<bits/stdc++.h>
using namespace std;
const int N=522, M=N*N*2;
//char hexdigit[17]="0123456789ABCDEF";
int n,qx[M]={},qy[M]={},l[M]={},head=0,tail=0;
int a[N][N]={},s[N][N]={},len=0;
char ch[M]={};
int main()
{
    freopen("coding.in","r",stdin);
    freopen("coding.out","w",stdout);
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                scanf("%d",&a[i][j]);
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
        len=0;
        head=tail=0;
        ++tail;
        qx[tail]=1,qy[tail]=1,l[tail]=n;
        while(head!=tail)
        {
            ++head;
            int sx=qx[head], sy=qy[head], sl=l[head];
            int sum=s[sx+sl-1][sy+sl-1]-s[sx+sl-1][sy-1]
                    -s[sx-1][sy+sl-1]+s[sx-1][sy-1];
            if(sum==sl*sl)
            {
                ch[++len]='0';
                ch[++len]='1';
                continue;
            }
            if(sum==0)
            {
                ch[++len]='0';
                ch[++len]='0';
                continue;
            }
            ch[++len]='1';
            int nl=sl/2;
            ++tail;
            qx[tail]=sx,qy[tail]=sy,l[tail]=nl;
            ++tail;
            qx[tail]=sx,qy[tail]=sy+nl,l[tail]=nl;
            ++tail;
            qx[tail]=sx+nl,qy[tail]=sy,l[tail]=nl;
            ++tail;
            qx[tail]=sx+nl,qy[tail]=sy+nl,l[tail]=nl;
        }
        ch[++len]=0;
        puts(ch+1);
    }
    fclose(stdin);
    fclose(stdout);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值