Блог пользователя weiqi

Автор weiqi, 16 лет назад, По-английски
code:
#include <vector> 
#include <list> 
#include <map> 
#include <set> 
#include <deque> 
#include <stack> 
#include <bitset> 
#include <algorithm> 
#include <functional> 
#include <numeric> 
#include <utility> 
#include <sstream> 
#include <iostream> 
#include <iomanip> 
#include <cstdio> 
#include <cmath> 
#include <cstdlib> 
#include <ctime> 
#include <queue> 
#include <string.h> 
using namespace std; 
#define mod 1000 
char flag[101][101]; 
int main() 
{ 
   
int n,m,a,b,c,nn,mm,i,j,k; 
    scanf
("%d %d %d %d %d",&n,&m,&a,&b,&c); 
   
if(n*m%2==1)printf("IMPOSSIBLE\n"); 
   
else 
   
{ 
        nn
=n;mm=m; 
       
if(n%2==1) 
       
{ 
           
for(i=0;i<m;i+=2) 
           
{ 
                flag
[n-1][i]=1; 
                flag
[n-1][i+1]=1; 
                a
--; 
           
} 
           
if(a<0) 
           
{ 
                printf
("IMPOSSIBLE\n"); 
               
return 0; 
           
} 
            n
--; 
       
} 
       
if(m%2==1) 
       
{ 
           
for(i=0;i<n;i+=2) 
           
{ 
                flag
[i][m-1]=2; 
                flag
[i+1][m-1]=2; 
                b
--; 
           
} 
           
if(b<0) 
           
{ 
                printf
("IMPOSSIBLE\n"); 
               
return 0; 
           
} 
            m
--; 
       
} 
        i
=0;j=0; 
       
while(i<n) 
       
{ 
           
char t = (char)('a' + ((i/2) % 2) * 2 + (j/2) % 2);  
           
if(c>0) 
           
{ 
                c
--; 
                flag
[i][j]=t; 
                flag
[i][j+1]=t; 
                flag
[i+1][j]=t; 
                flag
[i+1][j+1]=t; 
                j
+=2; 
               
if(j>=m) 
               
{ 
                    j
=0; 
                    i
+=2; 
               
} 
           
} 
           
else if(b>1) 
           
{ 
                b
-=2; 
                flag
[i][j]=t; 
                flag
[i+1][j]=t; 
                flag
[i][j+1]=t+5; 
                flag
[i+1][j+1]=t+5; 
                j
+=2; 
               
if(j>=m) 
               
{ 
                    j
=0; 
                    i
+=2; 
               
} 
           
} 
           
else if(a>1) 
           
{ 
                a
-=2; 
                flag
[i][j]=t; 
                flag
[i][j+1]=t; 
                flag
[i+1][j]=t+5; 
                flag
[i+1][j+1]=t+5; 
                j
+=2; 
               
if(j>=m) 
               
{ 
                    j
=0; 
                    i
+=2; 
               
} 
           
} 
           
else break; 
       
} 
       
if(i>=n) 
       
{ 
           
for(i=0;i<nn;i++) 
           
{ 
               
for(j=0;j<mm;j++) 
               
{ 
                    printf
("%c",flag[i][j]); 
               
} 
                printf
("\n"); 
           
} 
       
} 
       
else 
       
{ 
            printf
("IMPOSSIBLE\n"); 
       
} 
   
} 
   
return 0; 
}
  • Проголосовать: нравится
  • -2
  • Проголосовать: не нравится

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Your program writes in output symbol with code 1.
flag
[n-1][i]=1;
Replace it with 'z' and you will get WA test 9.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Have you checked your code on the one-side-odd tests? Like this: 4 5 100 100 100.
Your code:
                flag[n-1][i]=1; 
                flag
[n-1][i+1]=1;
So, you put char with ascii-code 1. By the problem statement you should output only lower-case latin letters.
16 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится
Oops, it's my fault :)

Your program writes in output symbol with code 1.
flag
[n-1][i]=1;
Replace it with
(char)('y'+(i/2%2))
and you will get WA test 21.
Add a case m==0 (mm==1) in the code and you will get AC :)