今天上的是廣搜。因爲座位移了,所以看得更清楚,聽得也懂了一些。
深搜就是求解,而廣搜是求最優解。所以其實是有很大不同的。
今天的考題,第一題很簡單,但是還是有人爆零。我只對了第一題。
第一題——構造迴文串
描述:
小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);
}