#define _DEBUG 0 #include #include #include #include int main(void) { int scan;//scanf警告用 int ans=0; int i, j; char s[100010];scan=scanf("%s",s);int slen=strlen(s); bool can[10][100010] ={false};//繰り下がっても5になる一覧 // bool can5[100010] ={false};//5になる一覧 // bool can4[100010] ={false};//5がダメなら4になる一覧 bool cannot[100010]={false};//何もかもダメなので、繰り下げして5になる一覧 //■左から右へいったん走査 for(i=0; i",kurisage); #endif if(kurisage) { if (can[6][i])kurisage=false,kurisageindex=i+1;//5より大きいので繰り下げても影響なし。そして繰り下げ完了 else if(can[5][i])can[5][i]=false,kurisage=false,kurisageindex=i+1;//5を繰り下げて4にする。そして繰り下げ完了 else can[4][i]=false,cannot[i]=true;//繰り下げ継続 } if(cannot[i]) { //繰り下げ開始 kurisage=true; kurisageindex=i; } #if _DEBUG printf(" %d (index = %d)\n",kurisage,kurisageindex); #endif } #if _DEBUG puts("■2"); for(i=0; i