AOJ0596&AOJ0258
とりあえず二問。
AOJ0595
非常に汚い
#include <cstdio> using namespace std; int main(){ int n; char s[1003]; int dp[1003][8] = {0}; scanf("%d",&n); scanf("%s",&s); if(s[0] == 'J'){ dp[1][0] = 1; dp[1][3] = 1; dp[1][5] = 1; dp[1][6] = 1; }else if(s[0] == 'O'){ dp[1][3] = 1; dp[1][6] = 1; }else if(s[0] == 'I'){ dp[1][5] = 1; dp[1][6] = 1; } for(int i = 2;i <= n;i++){ int a0 = dp[i-1][0] + dp[i-1][3] + dp[i-1][5] + dp[i-1][6]; int a1 = dp[i-1][1] +dp[i-1][3] +dp[i-1][4] +dp[i-1][6]; int a2 = dp[i-1][2] +dp[i-1][4] +dp[i-1][5] +dp[i-1][6]; int a6 = dp[i-1][0] +dp[i-1][1] +dp[i-1][2] +dp[i-1][3] +dp[i-1][4] +dp[i-1][5]+dp[i-1][6] ; int a3 = a6 - dp[i-1][2]; int a4 = a6 - dp[i-1][0]; int a5 = a6 - dp[i-1][1]; dp[i][6] = a6; if(s[i-1] == 'J'){ dp[i][0] += a0; dp[i][3] += a3; dp[i][5] += a5; }else if(s[i-1] == 'O'){ dp[i][1] = a1; dp[i][3] = a3; dp[i][4] = a4; }else if(s[i-1] == 'I'){ dp[i][2] += a2; dp[i][4] += a4; dp[i][5] += a5; } for(int j = 0;j < 6;j++){ dp[i][j] %= 10007; } } int ans =0; for(int i = 0;i <= 6;i++){ ans += dp[n][i]; ans %= 10007; } printf("%d\n",ans%10007); return 0; }
AOJ0258
やるだけ
#include <cstdio> using namespace std; int main(){ while(1){ int n=0,d[103] = {0}; scanf("%d",&n); if(n == 0)break; n+=1; for(int i = 1;i <= n;i++){ scanf("%d",&d[i]); } for(int i = 1;i <= n;i++){ int sa = 0; int nau; if(i == 1){ sa = d[3] - d[2]; nau = d[2]; }else if(i == 2){ sa = d[4] - d[3]; nau = d[1]; }else{ sa = d[2] - d[1]; nau = d[1]; } for(int j = 1;j <= n;j++){ if(i == j) continue; if(d[j] != nau) goto out; nau += sa; } printf("%d\n",d[i]); break; out: ; } } return 0; }