2013腾讯编程马拉松初赛 20130320第一场1001 小Q系列故事——屌丝的逆袭 简单题

来源:互联网 发布:加壳软件 编辑:程序博客网 时间:2024/05/20 21:59
//模板开始#include <string>   #include <vector>   #include <algorithm>   #include <iostream>   #include <sstream>   #include <fstream>   #include <map>   #include <set>   #include <cstdio>   #include <cmath>   #include <cstdlib>   #include <ctime>#include<iomanip>#define SZ(x) (int(x.size()))using namespace std;int toInt(string s){istringstream sin(s); int t; sin>>t; return t;}template<class T> string toString(T x){ostringstream sout; sout<<x; return sout.str();}typedef long long int64;int64 toInt64(string s){istringstream sin(s); int64 t; sin>>t;return t;}template<class T> T gcd(T a, T b){ if(a<0) return gcd(-a, b);if(b<0) return gcd(a, -b);return (b == 0)? a : gcd(b, a % b);}//模板结束(通用部分)int main(){int m,n;int defen;int zuigaodefen;int index1, index2;int grade[21][21];int data;while(cin>>m>>n && !(m == 0 && n == 0)){for(int i = 0; i < m; i++){//存入打分数据for(int j = 0; j < n; j++){cin>>data;grade[i][j] = data;}}index1 = -1;//数据的初始化index2 = -1;zuigaodefen = -600;for(int i = 0; i < m; i++){//依次求出每个位置(数组下标)的得分for(int j = 0; j < n; j++){defen = 0;if(i - 1 >= 0){//上下左右四种可能的情况的讨论if(grade[i - 1][j] * grade[i][j] < 0){defen += abs(grade[i - 1][j]);}else{defen -= abs(grade[i - 1][j]);}}if(i + 1 <= m - 1){if(grade[i + 1][j] * grade[i][j] < 0){defen += abs(grade[i + 1][j]);}else{defen -= abs(grade[i + 1][j]);}}if(j - 1 >= 0){if(grade[i][j - 1] * grade[i][j] < 0){defen += abs(grade[i][j - 1]);}else{defen -= abs(grade[i][j - 1]);}}if(j + 1 <= n - 1){if(grade[i][j + 1] * grade[i][j] < 0){defen += abs(grade[i][j + 1]);}else{defen -= abs(grade[i][j + 1]);}}if(defen > zuigaodefen){//和其他位置的得分相比较,//决定是否更新最高得分的位置zuigaodefen = defen;index1 = i;index2 = j;}else if(defen == zuigaodefen){if(index1 > i){index1 = i;index2 = j;}else if(index1 == i){if(index2 > j){index2 = j;}}}}}cout<<index1 + 1<<" "<<index2 + 1<<" "<<zuigaodefen<<endl;//输出(注意是“行列号”的输出)}}


 

原创粉丝点击