SRM 404 DIV1 Easy - RevealTriangle ○

問題


http://community.topcoder.com/stat?c=problem_statement&pm=8215&rd=12176

逆三角形からなる数字の配列が与えられる。
高さが4のとき、1行目は数字が4つ、2行めは3つ、、、4行めは数字が1つになる。

また、各行について1つは数字がわかっているがその他の数字は?となりわかっていない。
ある位置の数字は、その上にある数字と右上にある数字の和の一桁目の数になる。

このとき、?の数字をすべて復元して求める。

解き方


一番下の行は1つ、つまりすべての数字が分かっているため、
すべての数字を復元することができる。

また、復元については下から上へ順に行っていけばよい。
ある行について調べるとき、その下の行はすべてわかっていることから
?2

のように上側の数字が?になる。
このとき、(3+10ー2)%10が?の数になるので
このようにすべての?を求めてあげればよい。


コード


class RevealTriangle {

public: vector<string> calcTriangle(vector<string> q) {
int n=q.size();

for(int i=n-2;i>=0;i--){
while(1){
if(q[i].find('?')==string::npos)break;

for(int j=0;j<n-i;j++){
int cnt= (q[i][j]=='?') + (q[i][j+1]=='?');
if(cnt==1){
int y=0;
if(q[i][j]!='?')y=q[i][j]-'0';
else y=q[i][j+1]-'0';

int x=(q[i+1][j]-'0'+10-y)%10;

if(q[i][j]=='?')q[i][j]=x+'0';
else q[i][j+1]=x+'0';
}
}
}
}

return q;
}

};

Share this

Related Posts

Previous
Next Post »