# Greedy# Math# Simulation

e623 - 2. PPAP

🔗 前往 ZeroJudge 原題

題目描述

題目要求根據輸入的數字 a,模擬 PPAP (Pen-Pineapple-Apple-Pen) 的歌曲,並輸出對應的歌詞。a 代表歌曲中 "Pen" 和 "Pineapple"、"Apple" 的總數。程式需要計算出 "Pen"、"Pineapple" 和 "Apple" 各出現多少次,並根據出現次數輸出對應的歌詞。

解題思路

這題的核心在於理解 PPAP 歌曲的模式。歌曲的模式是 "Pen", "Pineapple", "Apple", "Pen"。因此,可以將輸入的數字 a 分解成 "Pen"、"Pineapple" 和 "Apple" 的數量。

程式首先計算出最多可以有多少個完整的 "Pen-Pineapple-Apple" 組合。然後,計算剩餘的數量,並根據剩餘數量確定是輸出 "Pen"、"Pineapple"、"Apple" 還是 "Pineapple pen"。

程式使用一個迴圈來計算最多可以有多少個完整的 "Pen-Pineapple-Apple" 組合,然後計算剩餘的數量。最後,根據剩餘數量輸出對應的歌詞。

複雜度分析

  • 時間複雜度: O(sqrt(a))
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int main(){
	std::ios::sync_with_stdio(false);
    cin.tie(NULL);
	int a;
	while(cin >> a){
		int i=1,ans=1;
		while((4+4*i)*i/2<a)
			i++;
		a-=(4+4*(i-1))*(i-1)/2;
		while(a>ans*i)
			ans++;
		if(ans==1)
			cout << "Pen\n";
		else if(ans==2)
			cout << "Pineapple\n";
		else if(ans==3)
			cout << "Apple\n";
		else
			cout << "Pineapple pen\n";
	}
}

Discussion