結果
問題 | No.401 数字の渦巻き |
ユーザー |
|
提出日時 | 2017-10-10 14:02:20 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,706 bytes |
コンパイル時間 | 671 ms |
コンパイル使用メモリ | 84,000 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-17 08:24:14 |
合計ジャッジ時間 | 1,465 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 30 |
ソースコード
#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <climits>#include <cmath>#include <string>#include <vector>#include <algorithm>#include <queue>#include <map>#include <functional>#include <set>#include <numeric>#include <stack>#include <utility>#include <time.h>#include <iterator>//#include "util.h"using namespace std;typedef unsigned uint;typedef long long lint;typedef unsigned long long ulint;//呪文template <typename _KTy, typename _Ty> ostream& operator << (ostream& ostr, const pair<_KTy, _Ty>& m) { cout << "{" << m.first << ", " << m.second <<"}"; return ostr; }template <typename _KTy, typename _Ty> ostream& operator << (ostream& ostr, const map<_KTy, _Ty>& m) { if (m.empty()) { cout << "{ }"; return ostr; }cout << "{" << *m.begin(); for (auto itr = ++m.begin(); itr != m.end(); itr++) { cout << ", " << *itr; } cout << "}"; return ostr; }template <typename _Ty> ostream& operator << (ostream& ostr, const vector<_Ty>& v) { if (v.empty()) { cout << "{ }"; return ostr; } cout << "{" << v.front(); for (auto itr = ++v.begin(); itr != v.end(); itr++) { cout << ", " << *itr; } cout << "}"; return ostr; }template <typename _Ty> ostream& operator << (ostream& ostr, const set<_Ty>& s) { if (s.empty()) { cout << "{ }"; return ostr; } cout << "{" << *(s.begin()); for (auto itr = ++s.begin(); itr != s.end(); itr++) { cout << ", " << *itr; } cout << "}"; return ostr; }template <typename T> void print(T* v, int N) { if (N == 0) cout << "{ }"; cout << "{" << v[0]; for (int i = 1; i < N; i++) cout << ", " << v[i]; cout<< "}"; }#define PI 3.14159265358979323846#define EPS 1e-8#define MIN(a,b) ((a)<(b)?(a):(b))#define MAX(a,b) ((a)>(b)?(a):(b))#define all(x) (x).begin(), (x).end()enum dir {LEFT = 0,DOWN = 1,RIGHT = 2,UP = 3,};const int dx[] = { 1, 0, -1, 0 };const int dy[] = { 0, 1, 0, -1 };void spiral(int N){vector< vector<int> > sp(N, vector<int>(N, 0));int x = 0, y = 0, n = 1;dir d = LEFT;while (1) {sp[y][x] = n;// 範囲チェックif (x + dx[d] < 0 || N <= x + dx[d] || y + dy[d] < 0 || N <= y + dy[d] || sp[y + dy[d]][x + dx[d]] != 0)d = (dir)(((int)d + 1) % 4);// 行き止まりif (x + dx[d] < 0 || N <= x + dx[d] || y + dy[d] < 0 || N <= y + dy[d] || sp[y + dy[d]][x + dx[d]] != 0)break;x += dx[d]; y += dy[d];n++;}for (int i = 0; i < N; i++) {printf("%03d", sp[i][0]);for (int j = 1; j < N; j++) {printf(" %03d", sp[i][j]);}printf("\n");}}int yuki0401(){int N;cin >> N;spiral(N);return 0;}int main(){//clock_t start, end;//start = clock();yuki0401();//end = clock();//printf("%d msec.\n", end - start);return 0;}