結果
| 問題 | No.232 めぐるはめぐる (2) | 
| コンテスト | |
| ユーザー |  edamame882 | 
| 提出日時 | 2019-07-26 01:32:39 | 
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 126 ms / 1,000 ms | 
| コード長 | 2,814 bytes | 
| コンパイル時間 | 1,612 ms | 
| コンパイル使用メモリ | 168,984 KB | 
| 実行使用メモリ | 5,376 KB | 
| 最終ジャッジ日時 | 2024-09-14 12:46:26 | 
| 合計ジャッジ時間 | 3,346 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 22 | 
ソースコード
#include <bits/stdc++.h>
using namespace std;
//repetition
#define FOR(i,a,b) for(ll i=(a);i<(b);++i)
#define rep(i, n) for(ll i = 0; i < (ll)(n); i++)
//container util
#define all(x) (x).begin(),(x).end()
//typedef
typedef long long ll;
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<ll> VLL;
typedef vector<VLL> VVLL;
typedef vector<string> VS;
typedef pair<int, int> PII;
typedef pair<ll, ll> PLL;
//const value
//const ll MOD = 1e9 + 7;
//const int dx[] = {0,1,0,-1};//{0,0,1,1,1,-1,-1,-1};
//const int dy[] = {1,0,-1,0};//{1,-1,0,1,-1,0,1,-1};
//conversion
inline int toInt(string s) {int v; istringstream sin(s);sin>>v;return v;}
inline ll toLL(string s) {ll v; istringstream sin(s);sin>>v;return v;}
template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
int main(){
  ios::sync_with_stdio(false);
  cin.tie(0);
  ll t,a,b;
  cin >> t >> a >> b;
  if(t < max(a,b)){
    cout << "NO" << endl;
    return 0;
  }
  // cerr << "not break" << endl;
  // 最小移動回数
  int diff = t - max(a,b);
  if(diff % 2 == 0){
    // このまま時間稼ぎする
    cout << "YES" << "\n";
    int cnt = min(a,b);
    rep(i,cnt){
      cout << "^>" << endl;
      a--;
      b--;
      // cout << "hi" << endl;
    }
    // cout << "a,b " << a << "," << b << endl;
    while(a>0){cout << "^" << endl;a--;}
    while(b>0){cout << ">" << endl;b--;}
    rep(i,diff/2){
      cout << ">" << endl;
      cout << "<" << endl;
    }
    return 0;
  }else{
    // 斜め移動の回数を1回減らす -> 移動回数が一回増える
    if(a > 0 && b > 0 && diff - 1 >= 0){
      cout << "YES" << "\n";
      cout << ">" << endl;
      cout << "^" << endl;
      a--,b--;
      int cnt = min(a,b);
      rep(i,cnt){
        cout << "^>" << endl;
        a--;
        b--;
      }
      while(a>0){cout << "^" << endl; a--;}
      while(b>0){cout << ">" << endl; b--;}
      rep(i,(diff-1)/2){
        cout << ">" << endl;
        cout << "<" << endl;
      }
    }else if(a > 0 && diff - 1 >= 0){
      cout << "YES" << "\n";
      cout << "^>" << endl;
      cout << "<" << endl;
      a--;
      while(a>0){cout << "^" << endl; a--;}
      rep(i,(diff-1)/2){
        cout << ">" << endl;
        cout << "<" << endl;
      }
    }else if(b > 0 && diff - 1 >= 0){
      cout << "YES" << "\n";
      cout << "^>" << endl;
      cout << "v" << endl;
      b--;
      while(b>0){cout << ">" << endl; b--;}
      rep(i,(diff-1)/2){
        cout << ">" << endl;
        cout << "<" << endl;
      }
    }else if(t >= 3){
      cout << "YES" << "\n";
      cout << "^>" << endl;
      cout << "v" << endl;
      cout << "<" << endl;
      t -= 3;
        while(t > 0){cout << ">\n<\n"; t--;}
    }
    else{
      cout << "NO" << "\n";
    }
  }
  return 0;
}
            
            
            
        