#54705: C++解法


william000000000 (unknown)


#include <iostream>
using namespace std;

// 將座標變化轉換成方向代碼:東=0, 北=1, 西=2, 南=3
int get_dir(int x0, int y0, int x1, int y1) {
    if (x1 > x0) return 0; // 東
    if (y1 > y0) return 1; // 北
    if (x1 < x0) return 2; // 西
    if (y1 < y0) return 3; // 南
    return -1;
}

int main() {
    int n;
    if (!(cin >> n)) return 0;

    int x0 = 0, y0 = 0, x1, y1;
    int left = 0, right = 0, turnback = 0;
    
    // 1. 處理第一步 (確立初始方向,不計轉彎)
    cin >> x1 >> y1;
    int dir0 = get_dir(x0, y0, x1, y1);
    x0 = x1; y0 = y1;

    // 2. 處理剩下的 n-1 步
    for (int i = 1; i < n; i++) {
        cin >> x1 >> y1;
        int dir1 = get_dir(x0, y0, x1, y1);
        
        // 核心邏輯:計算方向差
        int diff = (dir1 - dir0 + 4) % 4;
        
        if (diff == 1) left++;
        else if (diff == 3) right++;
        else if (diff == 2) turnback++;
        // diff == 0 是直走,不做任何事

        // 更新狀態,準備看下一步
        x0 = x1; 
        y0 = y1; 
        dir0 = dir1;
    }

    cout << left << " " << right << " " << turnback << "\n";
    return 0;
}