题目链接: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;
}