| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:AC的不容易啊。。发个帖庆祝下,附代码In Reply To:AC的不容易啊。。发个帖庆祝下,附代码 Posted by:yzhw at 2009-03-27 20:14:09 > Source Code
>
> Problem: 1069 User: yzhw
> Memory: 320K Time: 79MS
> Language: GCC Result: Accepted
>
> Source Code
> # include <stdio.h>
> # include <stdlib.h>
> # include <stdbool.h>
> bool map[52][52];
> int num,n,list[11];
> void printmap()
> {
> int i,j;
> for(i=1;i<=2*n;i++)
> {
> for(j=1;j<4*n;j++) printf("%d ",map[i][j]);
> printf("\n");
> }
> printf("\n\n");
> }
> bool canput(int r,int c,int len)
> {
> int i,j;
> if(r+len-1>2*n||c+len-1>4*n) return 0;
> if(c%2==0)
> {
> for(i=r;i<r+len;i++)
> for(j=c+2*(i-r);j<c+2*(i-r)+2*len-1-2*(i-r);j++)
> if(map[i][j]) return 0;
> }
> else
> {
> for(i=r;i<r+len;i++)
> for(j=c;j<c+2*(i-r+1)-1;j++)
> if(map[i][j]) return 0;
> }
> return 1;
> }
> void put(int r,int c,int len)
> {
> int i,j;
> if(c%2==0)
> {
> for(i=r;i<r+len;i++)
> for(j=c+2*(i-r);j<c+2*(i-r)+2*len-1-2*(i-r);j++)
> map[i][j]=1;
> }
> else
> {
> for(i=r;i<r+len;i++)
> for(j=c;j<c+2*(i-r+1)-1;j++)
> map[i][j]=1;
> }
> }
> void deput(int r,int c,int len)
> {
> int i,j;
> if(c%2==0)
> {
> for(i=r;i<r+len;i++)
> for(j=c+2*(i-r);j<c+2*(i-r)+2*len-1-2*(i-r);j++)
> map[i][j]=0;
> }
> else
> {
> for(i=r;i<r+len;i++)
> for(j=c;j<c+2*(i-r+1)-1;j++)
> map[i][j]=0;
> }
> }
> bool detect(int r,int c)
> {
> if(r>2*n) return 1;
> else if(c>4*n) return detect(r+1,1);
> else if(map[r][c])
> {
> int i;
> for(i=c;i<=4*n;i++)
> if(!map[r][i]) break;
> return detect(r,i);
> }
> else
> {
> int i;
> for(i=1;i<=num;i++)
> {
> if(canput(r,c,list[i]))
> {
> put(r,c,list[i]);
> if(detect(r,c+1)) return 1;
> deput(r,c,list[i]);
> }
> else break;
> }
> return 0;
> }
> }
> int cmp(const void *a,const void *b)
> {
> return *(int *)a-*(int *)b;
> }
> int main()
> {
> int test,i,k;
> scanf("%d",&test);
> for(i=1;i<=test;i++)
> {
> int j;
> bool flag=0;
> scanf("%d",&n);
> scanf("%d",&num);
> for(j=1;j<=num;j++) scanf("%d",&list[j]);
> qsort(list+1,num,sizeof(int),cmp);
> for(j=1;j<=num;j++)/*优化*/
> {
> if(n%list[j]==0)
> {
> printf("YES\n");
> flag=1;
> break;
> }
> if(list[j]>n)
> {
> num=j-1;
> break;
> }
> }
> if(flag) continue;
> for(j=1;j<=num;j++)
> for(k=1;k<j;k++)
> {
> if(list[j]%list[k]==0)
> {
> int l;
> for(l=j;l<num;l++) list[l]=list[l+1];
> j--;
> num--;
> break;
> }
> }
> /*---------------------------------------------*/
> memset(map,1,sizeof(map));
> for(j=1;j<=n;j++)
> for(k=1;k<=2*n+1+(j-1)*2;k++)
> map[j][k]=0;
> for(j=n+1;j<=2*n;j++)
> for(k=(j-n)*2;k<=4*n;k++)
> map[j][k]=0;
> if(detect(1,1)) printf("YES\n");
> else printf("NO\n");
> }
>
> return 0;
> }
>
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator