/*多边形游戏*/ #include<stdio.h> void MinMax(int n,int i,int s,int j,__int64& minf,__int64& maxf,__int64 m[101][101][2],char b[101]); __int64 PolyMax(int n,__int64 m[101][101][2],char b[101]); int main(){ int a[101]; char b[101]; int n; while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;i++){ getchar(); scanf("%c",&b[i]); scanf("%d",&a[i]); } __int64 m[101][101][2]={0}; for(int ii=1;ii<=n;ii++){ m[ii][1][0]=m[ii][1][1]=a[ii]; } __int64 sum=PolyMax(n,m,b); printf("%I64d\n",sum); for(int kk=0,jj=1;jj<=n;jj++){ if(sum==m[jj][n][1]){ if(kk!=0) putchar(' '); printf("%d",jj); kk=1; } } putchar('\n'); } return 0; } __int64 PolyMax(int n,__int64 m[101][101][2],char b[101]){ __int64 minf,maxf; for(int j=2;j<=n;j++){ for(int i=1;i<=n;i++){ for(int k=1;k<j;k++){ MinMax(n,i,k,j,minf,maxf,m,b); if(k==1){ m[i][j][0]=minf; m[i][j][1]=maxf; continue; } if(m[i][j][0]>minf)m[i][j][0]=minf; if(m[i][j][1]<maxf)m[i][j][1]=maxf; } } } __int64 temp = m[1][n][1]; for(int i=2;i<=n;i++){ if(temp<m[i][n][1]){ temp=m[i][n][1]; } } return temp; } void MinMax(int n,int i,int s,int j,__int64& minf,__int64& maxf,__int64 m[101][101][2],char op[101]){ minf = 0x7fffffff; maxf = -0x7fffffff; __int64 e[4]; __int64 a=m[i][s][0],b=m[i][s][1],r=(i+s-1)%n+1; __int64 c=m[r][j-s][0],d=m[r][j-s][1]; if(op[r] == 't'){ minf=a+c; maxf=b+d; } else{ e[0]=a*c; e[1]=a*d; e[2]=b*c; e[3]=b*d; minf=e[0]; maxf=e[0]; for(int r=1;r<4;r++){ if(minf>e[r]) minf=e[r]; if(maxf<e[r]) maxf=e[r]; } } }