阿里第二题思路简单,但是写起来很复杂,需要多个数组保存变量

反正我是写完就剩10分钟了,提交一直出现边界溢出的错误,找也找不到哪里的问题?有大佬帮忙看看吗

#include <bits/stdc++.h>
using namespace std;
int n,m,q;
int temp;
int i,j;
int x,y;

vector<pair<int,int> >vp;//输入的查询的数据
vector<vector<int> >vvi;//输入的数组
vector<vector<int > > vvp1,vvp2;//分别保存行和列不为0的坐标
vector<bool> visited1,visited2;//判断是否填充了某一行

bool fillRow(){
    bool ret = false;
    for(i=0;i<n;++i){
        if(vvp1[i].size() > 1 && !visited1[i]){
            visited1[i] = true;
            ret =true;
            x = vvp1[i][0];
            y = vvp1[i][1];
            if(x>y) swap(x,y);
            temp = (vvi[i][y] - vvi[i][x])/(y-x);
            if(vvi[i][0] == 0) vvp2[0].push_back(i);
            vvi[i][0] = vvi[i][x]-(x-0)*temp;
            for(j=1;j<m;++j){
                if(vvi[i][j] == 0){
                    vvp2[j].push_back(i);
                    vvi[i][j] = vvi[i][j-1]+temp;
                }
            }
        }
    }
    return ret;
}

bool fillCol(){
    bool ret = false;
    for(j=0;j<m;++j){
        if(vvp2[j].size() > 1 && !visited2[j]){
            visited2[j] = true;
            ret = true;
            x = vvp2[j][0];
            y = vvp2[j][1];
            if(x>y)swap(x,y);
            temp = (vvi[y][j] - vvi[x][j])/(y-x);
            if(vvi[0][j] == 0) vvp1[0].push_back(j);
            vvi[j][0] = vvi[x][j]-(x-0)*temp;
            for(i=1;i<n;++i){
                if(vvi[i][j] == 0){
                    vvp1[i].push_back(j);
                    vvi[i][j] = vvi[i-1][j]+temp;
                }
            }
        }
    }
    return ret;
}

int main(){
    scanf("%d %d %d",&n,&m,&q);
    vp.resize(q);
    visited1.resize(n,false);    visited2.resize(m,false);

    vvi.resize(n,vector<int>(m));
    vvp1.resize(n),vvp2.resize(m);
    for(i=0;i<n;++i){
        for(j=0;j<m;++j){
            scanf("%d",&vvi[i][j]);
            if(vvi[i][j]!=0){
                vvp1[i].push_back(j);
                vvp2[j].push_back(i);
            }
        }
    }
    for(i=0;i<q;++i){
        scanf("%d %d",&temp,&j);
        vp[i] = {temp,j}; // x y
    }
    while(fillRow() || fillCol()){
    }

    for(i=0;i<q;++i){
        x = vp[i].first,y=vp[i].second;
        if(vvi[x][y] == 0){
            printf("Unknown\n");
        }else{
            printf("%d\n",vvi[x][y]);
        }
    }
    return 0;
}
#阿里巴巴##笔试题目#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:13
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务