diff options
Diffstat (limited to '556')
| -rwxr-xr-x | 556/amazing | bin | 0 -> 102112 bytes | |||
| -rw-r--r-- | 556/amazing.cpp | 163 | ||||
| -rw-r--r-- | 556/amazing.in | 108 | ||||
| -rw-r--r-- | 556/amazing.py | 4 | ||||
| -rw-r--r-- | 556/backup | 126 |
5 files changed, 401 insertions, 0 deletions
diff --git a/556/amazing b/556/amazing Binary files differnew file mode 100755 index 0000000..9a65934 --- /dev/null +++ b/556/amazing diff --git a/556/amazing.cpp b/556/amazing.cpp new file mode 100644 index 0000000..e9bc8d6 --- /dev/null +++ b/556/amazing.cpp @@ -0,0 +1,163 @@ +#include <iostream> +#include <string> +#include <vector> +#include <iomanip> +using namespace std; +/* +rows +j 0 1 2 3 4 +i +0 <0 1 0 1 0> +1 <0 1 0 1 0> +2 <0 0 0 0 0> + */ +// struct sq{ +// sq* N; +// sq* S; +// sq* E; +// sq* W; +// int count; +// }; + + +char turn_left(char); +char turn_right(char); + +int main(){ + int b, w, count[100][100]={0}; + vector<char> sq[100]; + string s; + + cin>>b>>w; + while(b>0){ + int count[100][100]={0}; + vector<char> sq[100]; + string s; + + for(int i=0;i<b;i++){ + cin>>s; + for(int j=0;j<w;j++) + sq[i].push_back(s[j]); + } + + int j = 0, i=b-1; + int wallj = 0, walli=b; + char dir='E'; + bool returned=false; + + while(!returned){ + if((walli<b && walli>=0) && (wallj>=0 && wallj<w)) + if(sq[walli][wallj]=='0'){ + if(dir=='S'){ + walli--; + wallj++; + } + else if(dir=='W'){ + walli++; + wallj++; + } + else if(dir=='N'){ + walli++; + wallj--; + } + else if(dir=='E'){ + walli--; + wallj--; + } + dir = turn_right(dir); + } + + if(dir=='E'){ + if(j+1<w && sq[i][j+1]=='0'){ + j++; + wallj++; + count[i][j]++; + } + else{ + dir = turn_left(dir); + walli--; + wallj++; + } + } + else if(dir=='N'){ + if(i-1>=0 && sq[i-1][j]=='0'){ + i--; + walli--; + count[i][j]++; + } + else{ + dir = turn_left(dir); + walli--; + wallj--; + } + } + else if(dir=='W'){ + if(j-1>=0 && sq[i][j-1]=='0'){ + j--; + wallj--; + count[i][j]++; + } + else{ + dir = turn_left(dir); + walli++; + wallj--; + } + } + else if(dir=='S'){ + if(i+1<b && sq[i+1][j]=='0'){ + i++; + walli++; + count[i][j]++; + } + else{ + dir = turn_left(dir); + walli++; + wallj++; + } + } + + if(i==b-1 && j==0) + returned = true; + } + + int visited[5]={0}; + for(int i=0; i<b; i++){ + for(int j=0; j<w; j++){ + if(count[i][j]>4) + continue; + else if(sq[i][j]=='0') + visited[count[i][j]]++; + } + } + for(int k=0; k<5; k++) + cout<<right<<setw(3)<<visited[k]; + cout<<endl; + cin>>b>>w; + } +} + +char turn_left(char dir){ + char new_dir; + if(dir=='E') + new_dir = 'N'; + else if(dir=='N') + new_dir = 'W'; + else if(dir=='W') + new_dir = 'S'; + else if(dir == 'S') + new_dir = 'E'; + return new_dir; +} + +char turn_right(char dir){ + char new_dir; + if(dir=='E') + new_dir = 'S'; + else if(dir=='N') + new_dir = 'E'; + else if(dir=='W') + new_dir = 'N'; + else if(dir == 'S') + new_dir = 'W'; + return new_dir; +} diff --git a/556/amazing.in b/556/amazing.in new file mode 100644 index 0000000..52d676a --- /dev/null +++ b/556/amazing.in @@ -0,0 +1,108 @@ +11 10 +0010000100 +0100000001 +0100000100 +1010000000 +0001000000 +0000000000 +0011011000 +0010000001 +0101000000 +0000000011 +0010100101 +2 24 +001100010000000000000000 +000010101100101000001010 +12 28 +1000100000101000010000100100 +0001001000000001001001000010 +0000000000000100000001000100 +1000011100000000000100000001 +0001000100010010000011000010 +0000100000000000000001101000 +0000000000000000001010000000 +0100000000010010000000100000 +0001000000110000101010100100 +0000110000001101000000001000 +0000100000111001000000100000 +0001101100000010111010111100 +29 6 +000000 +111000 +110011 +000000 +110011 +000000 +000100 +101000 +000000 +000100 +100001 +000100 +010000 +001010 +000000 +001010 +100110 +001100 +110000 +001000 +000001 +000100 +100000 +000000 +001000 +001100 +000000 +010000 +000000 +8 27 +110100000100000100010000000 +000000000001010101010000001 +000110110000010000010000001 +000100100001000001000000000 +000000001000111101000010010 +001000100100110001000010100 +001000000011000000000101000 +000000000000000100000001000 +11 24 +010000100000000001001001 +000000000101001000000110 +010000000010000000000101 +010010001100000001000001 +000100000000000000100100 +000100011010100000101000 +001001000100000000100101 +001001110000000000000001 +110011001000100001000000 +000000001000100100110100 +000010100000000000011001 +8 29 +01000110000000000000010000000 +11010101000000000011000000000 +00000000100100100000000000000 +11000100011000000000001010000 +00000001111000100000000000000 +00000011000000000000100100100 +00011100000111001100100000000 +00110000001000100000100011100 +5 3 +001 +010 +100 +000 +000 +9 3 +011 +000 +011 +000 +000 +000 +000 +000 +000 +2 11 +00000000001 +00111001000 +0 0
\ No newline at end of file diff --git a/556/amazing.py b/556/amazing.py new file mode 100644 index 0000000..6df6194 --- /dev/null +++ b/556/amazing.py @@ -0,0 +1,4 @@ + + +class square: + diff --git a/556/backup b/556/backup new file mode 100644 index 0000000..2ffcb12 --- /dev/null +++ b/556/backup @@ -0,0 +1,126 @@ +#include <iostream> +#include <string> +#include <vector> +using namespace std; +/* +rows +j 0 1 2 3 4 +i +0 <0 1 0 1 0> +1 <0 1 0 1 0> +2 <0 0 0 0 0> + */ +// struct sq{ +// sq* N; +// sq* S; +// sq* E; +// sq* W; +// int count; +// }; + + +char turn_left(char); +char turn_right(char); + +int main(){ + int b, w, count[100][100]={0}; + vector<char> sq[100]; + string s; + + cin>>b>>w; + while(b>0){ + for(int i=0;i<b;i++){ + cin>>s; + for(int j=0;j<w;j++) + sq[i]; + } + + int j = 0, i=b-1; + int wallj = 0, walli=b; + char dir='E'; + bool returned=false; + + while(!returned){ + count[i][j]++; + + if(sq[walli][wallj]==0) + dir = turn_right(dir); + + if(dir=='E'){ + if(j+1<w && sq[i][j+1]=='0'){ + j++; + wallj++; + } + else + dir = turn_left(dir); + } + else if(dir=='N'){ + if(i-1>=0 && sq[i-1][j]=='0'){ + i--; + walli--; + } + else + dir = turn_left(dir); + } + else if(dir=='W'){ + if(j-1>=0 && sq[i][j-1]=='0'){ + j--; + wallj--; + } + else + dir = turn_left(dir); + } + else if(dir=='S'){ + if(i+1<b && sq[i+1][j]=='0'){ + i++; + walli++; + } + else + dir = turn_left(dir); + } + + if(i==b-1 && j==0) + returned = true; + } + + int visited[5]={0}; + for(int i=0; i<b; i++){ + for(int j=0; j<w; j++){ + if(count[i][j]>4) + continue; + else if(sq[i][j]=='0') + visited[count[i][j]]++; + } + } + for(int k=0; k<5; k++) + cout<<visited[k]<<" "; + cout<<endl; + cin>>b>>w; + } +} + +char turn_left(char dir){ + char new_dir; + if(dir=='E') + new_dir = 'N'; + else if(dir=='N') + new_dir = 'W'; + else if(dir=='W') + new_dir = 'S'; + else if(dir == 'S') + new_dir = 'E'; + return new_dir; +} + +char turn_right(char dir){ + char new_dir; + if(dir=='E') + new_dir = 'S'; + else if(dir=='N') + new_dir = 'E'; + else if(dir=='W') + new_dir = 'N'; + else if(dir == 'S') + new_dir = 'W'; + return new_dir; +} |
