保证每个人拿糖>=1,在分糖最少的情况下,输出每个学生所分得的糖。
#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int>PII; const double eps=1e-5; const double pi=acos(-1.0); const int INF=0x3f3f3f3f; /* 老师分糖,给成绩好的人糖多。 给一个字符串代表学生拿糖的规律,有三种符号,L代表左边的人比自己高,R表示右边的高,=表示左右相等。 在保证分糖最少的情况下,输出每个学生所分得的糖。 */ char stu[1010]; int dp[1010]; int main() { int n,len; scanf("%d",&n); scanf("%s",stu+1); len=n; dp[0]=1; for(int i=1;i<len;i++) { if(stu[i]=='=') dp[i]=dp[i-1]; else if(stu[i]=='R') dp[i]=dp[i-1]+1; else { if(dp[i-1]>1) dp[i]=1; else { dp[i]=1; dp[i-1]++; for(int j=i-1;j>=1;j--) { if(stu[j]=='=') dp[j-1]=dp[j]; else if(stu[j]=='L') { if(dp[j-1]==dp[j]) dp[j-1]++; else break; } else break; } } } } for(int i=0;i<n;i++) { printf("%d ",dp[i]); } return 0; }