Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
求教runtime error 本地运行正常#include <iostream> #include <stdlib.h> #include <vector> #include <string> using namespace std; void math(int width); void analysis(int *grid, int *gridDec, int line = 1); int writeLine(int* grid, int* gridDec, int pixel, int n, int m); int width = 0; bool firstLineCaculate = false; //首行计算标志 vector<vector<long int>>resVec; vector<long int>tempV; int main(void) { while (cin >> width){ if (width == 0) break; math(width); } cout << "0"; system("pause"); return 0; } void analysis(int *grid, int *gridDec, int line){ int x = 0; int *res = new int[8]; memset(res, 0, 8 * sizeof(int)); for (int i = 0; i<width; i++){ memset(res, 0, 8 * sizeof(int)); x = line*width + i; if (line > 0){ if (i>0) res[0] = abs(grid[x - width - 1] - grid[x]); res[1] = abs(grid[x - width] - grid[x]); if (i<width - 1) res[2] = abs(grid[x - width + 1] - grid[x]); } if (i > 0) res[3] = abs(grid[x - 1] - grid[x]); if (i < width - 1) res[4] = abs(grid[x + 1] - grid[x]); if (line < 2){ if (i > 0) res[5] = abs(grid[x + width - 1] - grid[x]); res[6] = abs(grid[x + width] - grid[x]); if (i < width - 1) res[7] = abs(grid[x + width + 1] - grid[x]); } for (int j = 1; j<8; j++){ if (res[0]<res[j]) res[0] = res[j]; } gridDec[i] = res[0]; } //分析并读入vector for (int i = 0; i<width; i++){ if (resVec.size()>0 && gridDec[i] == resVec.back()[0]){ resVec.back()[1]++; } else{ tempV.clear(); tempV.push_back(gridDec[i]); tempV.push_back(1); resVec.push_back(tempV); } } delete[]res; } int writeLine(int* grid, int* gridDec, int pixel, int n, int m) { for (int i = 0; i < n; i++) { if (m + i < 3 * width){ grid[m + i] = pixel; if (m + i == 3 * width - 1){ if (!firstLineCaculate){ analysis(grid, gridDec, 0); firstLineCaculate = true; } analysis(grid, gridDec); } } else //当写入数大于总量时,数量下移一行 { for (int k = 0; k < width; k++){ grid[k] = grid[k + width]; grid[k + width] = grid[k + 2 * width]; grid[k + 2 * width] = 0; } grid[m + i - width] = pixel; m = m - width; } } return m; } void math(int width){ long int pixel, n; int toInputVol = 0; //待录入数据总量 int* grid = new int[width * 3]; //分析三排 memset(grid, 0, 3 * width*sizeof(int)); int* gridDec = new int[width]; //目标列表 memset(gridDec, 0, width*sizeof(int)); while (cin >> pixel >> n){ if (pixel == 0 && n == 0) { //中止后,分析最后一行 analysis(grid, gridDec, 2); break; } if (n >= 3 * width){ //n大于3倍行数时,直接写0 toInputVol = writeLine(grid, gridDec, pixel, 2 * width, toInputVol); toInputVol += 2 * width; tempV.clear(); tempV.push_back(0); tempV.push_back(n - 3 * width); resVec.push_back(tempV); n = width; //满员,触发计算 } toInputVol = writeLine(grid, gridDec, pixel, n, toInputVol); toInputVol += n; //已写入数量 } //输出结果 cout << width << endl; for (unsigned int i = 0; i < resVec.size(); i++) cout << resVec[i][0] << " " << resVec[i][1] << endl; resVec.clear(); cout << "0 0" << endl; delete[] grid; delete[] gridDec; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator