Submission #1053309

#TimeUsernameProblemLanguageResultExecution timeMemory
1053309user736482Cop and Robber (BOI14_coprobber)C++17
30 / 100
30 ms1872 KiB
#include<bits/stdc++.h>
#include<coprobber.h>
using namespace std;

vector<int> sasiad[507];
int akpos;
int licz,wym1,wym2;
int n,lastr=-1;

int to_pos(int x,int y){
    return y*wym1+x;
}
pair<int,int> to_coordinates(int val){
    return {val%wym1,val/wym1};
}

int start(int N,bool a[][500]){
    n=N;
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(a[i][j]){
                sasiad[i].push_back(j);
                sasiad[j].push_back(i);
                licz++;
                if(i==0)
                    if(j!=1)
                        wym1=j;
                if(j==n)
                    if(i!=n-1)
                        wym2=n-i;
            }
        }
    }
    return 0;
}
int nextMove(int r){
    if(licz==n-1){
        bool odw[507];
        int pop[507];
        for(int i=0;i<507;i++)
            odw[i]=0;
        odw[akpos]=1;
        pop[akpos]=akpos;
        queue<int>q;
        q.push(akpos);
        while(!q.empty()){
            int pom=q.front();
            q.pop();
            for(int i=0;i<sasiad[pom].size();i++){
                if(!odw[sasiad[pom][i]]){
                    odw[sasiad[pom][i]]=1;
                    pop[sasiad[pom][i]]=pom;
                    q.push(sasiad[pom][i]);
                }
            }
        }
        while(pop[r]!=akpos)
            r=pop[r];
        akpos=r;
        return r;
    }
    int x1=to_coordinates(akpos).first;
    int y1=to_coordinates(akpos).second;
    int x2=to_coordinates(r).first;
    int y2=to_coordinates(r).second;
    if(abs(x1-x2)==abs(y1-y2))
        return akpos;
    if(abs(x1-x2)>abs(y1-y2))
        if(x1>x2)
            x1--;
        else
            x1++;
    else
        if(y1>y2)
            y1--;
        else
            y1++;
    akpos=to_pos(x1,y1);
    return akpos;
}

Compilation message (stderr)

coprobber.cpp: In function 'int nextMove(int)':
coprobber.cpp:49:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |             for(int i=0;i<sasiad[pom].size();i++){
      |                         ~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...