- #include<bits/stdc++.h>
- using namespace std;
- vector<vector <int> > row;
- vector<int> possible_pos;
- void print(){
- for(int i=0; i<row.size();i++){
- for(int j=0; j<row[0].size();j++)
- cout<<row[i][j]<<" ";
- cout<<endl;
- }
- }
- void print_pos(){
- cout<<endl;
- for(int i=0; i<possible_pos.size();i++){
- cout<<possible_pos[i];
- }
- cout<<endl;
- }
- void set_initial_changes(){
- //initial position set
- possible_pos.push_back(0);
- if(row[0][1]!=2)
- possible_pos.push_back(1);
- else
- possible_pos.push_back(0);
- if(row[0][2]!=2)
- possible_pos.push_back(1);
- else
- possible_pos.push_back(0);
- if(row[0][3]!=2)
- possible_pos.push_back(1);
- else
- possible_pos.push_back(0);
- possible_pos.push_back(0);
- //initial row set
- for(int i=0;i<row[0].size();i++){
- if(row[0][i]==1 && i>0 && i<3)
- row[0][i]=1;
- else
- row[0][i]=0;
- }
- }
- void next_step(int look_for){
- for(int i=0;i<possible_pos.size();i++){
- if(possible_pos[i]!=0){
- if(i-1<0){
- if(row[look_for][i]!=-1)
- possible_pos[i]=1;
- if(row[look_for][i+1]!=-1)
- possible_pos[i+1]=1;
- if(row[look_for][i]==-1)
- possible_pos[i]=0;
- if(row[look_for][i+1]==-1)
- possible_pos[i+1]=0;
- }
- else if(i+1>=possible_pos.size()){
- if(row[look_for][i-1]!=-1)
- possible_pos[i-1]=1;
- if(row[look_for][i]!=-1)
- possible_pos[i]=1;
- if(row[look_for][i-1]==-1)
- possible_pos[i-1]=0;
- if(row[look_for][i]==-1)
- possible_pos[i]=0;
- }
- else{
- if(row[look_for][i-1]!=-1)
- possible_pos[i-1]=1;
- if(row[look_for][i]!=-1)
- possible_pos[i]=1;
- if(row[look_for][i+1]!=-1)
- possible_pos[i+1]=1;
- if(row[look_for][i-1]==-1)
- possible_pos[i-1]=0;
- if(row[look_for][i]==-1)
- possible_pos[i]=0;
- if(row[look_for][i+1]==-1)
- possible_pos[i+1]=0;
- }
- }
- }
- }
- void eleminate_enemy(int look_for){
- for(int i=0; i<possible_pos.size();i++)
- if(row[look_for][i]==2)
- row[look_for][i]= -1;
- }
- void point_row(int look_for){
- vector<vector<int>> temp_row;
- vector<int> temp_col;
- for(int i=0; i<possible_pos.size();i++){
- if(possible_pos[i]!=0){
- if(i==0){
- if(row[look_for][i]>=0){
- temp_col.push_back(max(row[look_for][i], row[look_for-1][i] + row[look_for][i]));
- temp_col.push_back(max(row[look_for][i+1], row[look_for-1][i] + row[look_for][i+1]));
- temp_col.push_back(row[look_for][2]);
- temp_col.push_back(row[look_for][3]);
- temp_col.push_back(row[look_for][4]);
- temp_row.push_back(temp_col);
- // cout<<" look_for and i = "<<look_for<<i<<endl;
- // cout<<temp_col[0]<<" "<<temp_col[1]<<" "<<temp_col[2]<<" "<<temp_col[3]<<" "<<temp_col[4];
- // cout<<endl;
- temp_col.clear();
- }
- }
- else if(i==possible_pos.size()-1){
- if(row[look_for][i]>=0){
- temp_col.push_back(row[look_for][0]);
- temp_col.push_back(row[look_for][1]);
- temp_col.push_back(row[look_for][2]);
- temp_col.push_back(max(row[look_for][i-1], row[look_for][i-1] + row[look_for-1][i]));
- temp_col.push_back(max(row[look_for][i], row[look_for-1][i] + row[look_for][i]));
- temp_row.push_back(temp_col);
- // cout<<" look_for and i = "<<look_for<<i<<endl;
- // cout<<temp_col[0]<<" "<<temp_col[1]<<" "<<temp_col[2]<<" "<<temp_col[3]<<" "<<temp_col[4];
- // cout<<endl;
- temp_col.clear();
- }
- }
- else{
- if(row[look_for][i]>=0){
- temp_col.push_back(max(row[look_for][i-1], row[look_for][i-1] + row[look_for-1][i]));
- temp_col.push_back(max(row[look_for][i], row[look_for-1][i] + row[look_for][i]));
- temp_col.push_back(max(row[look_for][i+1], row[look_for-1][i] + row[look_for][i+1]));
- if(i==1){
- temp_col.push_back(row[look_for][3]);
- temp_col.push_back(row[look_for][4]);
- }
- if(i==2){
- temp_col.insert(temp_col.begin(), row[look_for][0]);
- temp_col.push_back(row[look_for][4]);
- }
- if(i==3){
- temp_col.insert(temp_col.begin(), row[look_for][1]);
- temp_col.insert(temp_col.begin(), row[look_for][0]);
- }
- temp_row.push_back(temp_col);
- // cout<<" look_for and i = "<<look_for<<i<<endl;
- // cout<<temp_col[0]<<" "<<temp_col[1]<<" "<<temp_col[2]<<" "<<temp_col[3]<<" "<<temp_col[4];
- // cout<<endl;
- temp_col.clear();
- }
- }
- }
- }
- int maxa=temp_row[0][0];
- int maxb=temp_row[0][1];
- int maxc=temp_row[0][2];
- int maxd=temp_row[0][3];
- int maxe=temp_row[0][4];
- for(int k=1; k<temp_row.size();k++){
- for(int l=0; l<temp_row[0].size();l++){
- if(l==0)
- maxa = max(maxa, temp_row[k][l]);
- if(l==1)
- maxb = max(maxb, temp_row[k][l]);
- if(l==2)
- maxc = max(maxc, temp_row[k][l]);
- if(l==3)
- maxd = max(maxd, temp_row[k][l]);
- if(l==4)
- maxe = max(maxe, temp_row[k][l]);
- }
- }
- // cout<<"max"<< maxa<<" "<< maxb<<" "<< maxc<<" "<< maxd<<" "<< maxe<<endl;
- row[look_for][0]= row[look_for][0]<0 ? 0 : maxa;
- row[look_for][1]=row[look_for][1]<0 ? 0 : maxb;
- row[look_for][2]=row[look_for][2]<0 ? 0 : maxc;
- row[look_for][3]=row[look_for][3]<0 ? 0 : maxd;
- row[look_for][4]=row[look_for][4]<0 ? 0 : maxe;
- }
- void working(){
- int look_for=0;
- for(look_for=0;look_for<row.size();look_for++){
- if(look_for==0){
- set_initial_changes();
- }
- else{
- eleminate_enemy(look_for);
- next_step(look_for);
- point_row(look_for);
- }
- }
- }
- int main(){
- int levels;
- int a,b,c,d,e;
- cin>>levels;
- vector<int> col;
- while(levels--){
- cin>>a>>b>>c>>d>>e;
- col.push_back(a);
- col.push_back(b);
- col.push_back(c);
- col.push_back(d);
- col.push_back(e);
- row.insert(row.begin(), col);
- col.clear();
- }
- working();
- int res=0;
- for(int i=row.size()-1;i<row.size();i++){
- for(int j=0;j<row[0].size();j++){
- res=max(res, row[i][j]);
- }
- }
- cout<<res;
- return 0;
- }
Spaceship
Posted by Anonymous on Sun 18th Mar 2018 04:07
raw | new post
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.