题目链接:Codeforces 379B New Year Present
模拟。
维持一个sum值表示所有初始ai的和,然后从左向右走,再从右往左走,途中根据ai值更新sum值和ai值,直到sum = 0,退出while。
#include <iostream> using namespace std; const int MAX_N = 300 + 50; int arr[MAX_N]; int n; int main() { while(cin >> n) { int sum = 0; for(int i = 1;i <= n;i++) { cin >> arr[i]; sum += arr[i]; } int i = 1; int dir = 1; while(true) { if(dir == 1)// go to the right { if(arr[i] > 0) { cout << "P"; arr[i]--; sum--; if(sum == 0) break; if(i == n) { cout << "L"; i--; dir = 0; } else { cout << "R"; i++; } } else if(arr[i] == 0) { if(i == n) { cout << "L"; i--; dir = 0; } else { cout << "R"; i++; } } } else //go to the left { if(arr[i] > 0) { cout << "P"; arr[i]--; sum--; if(sum == 0) break; if(i == 1) { dir = 1; cout << "R"; i++; } else { cout << "L"; i--; } } else if(arr[i] == 0) { if(i == 1) { dir = 1; cout << "R"; i++; } else { cout << "L"; i--; } } } } cout << endl; } return 0; }