結果
問題 | No.311 z in FizzBuzzString |
ユーザー | koyumeishi |
提出日時 | 2015-12-13 03:16:17 |
言語 | JavaScript (node v21.7.1) |
結果 |
AC
|
実行時間 | 73 ms / 1,500 ms |
コード長 | 2,365 bytes |
コンパイル時間 | 61 ms |
コンパイル使用メモリ | 6,944 KB |
実行使用メモリ | 43,520 KB |
最終ジャッジ日時 | 2024-09-24 21:27:01 |
合計ジャッジ時間 | 1,589 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 68 ms
42,880 KB |
testcase_01 | AC | 68 ms
43,008 KB |
testcase_02 | AC | 68 ms
43,008 KB |
testcase_03 | AC | 69 ms
43,008 KB |
testcase_04 | AC | 70 ms
42,880 KB |
testcase_05 | AC | 68 ms
42,880 KB |
testcase_06 | AC | 68 ms
43,136 KB |
testcase_07 | AC | 72 ms
43,392 KB |
testcase_08 | AC | 71 ms
43,520 KB |
testcase_09 | AC | 73 ms
43,264 KB |
testcase_10 | AC | 72 ms
43,264 KB |
ソースコード
//process.stdin.resume(); //process.stdin.setEncoding('utf8'); Integer = function(val){ this.obj = new Array(40); this.head = 0; for(var i=0; i<40; i++){ this.obj[i] = val%10; if(this.obj[i]>0){ this.head = i; } val = Math.floor(val/10); } }; Integer.prototype.add = function(y) { var carry = 0; this.head = 0; for(var i=0; i<40; i++){ var tmp = this.obj[i] + y.obj[i] + carry; carry = Math.floor(tmp/10); this.obj[i] = tmp%10; if(this.obj[i]>0){ this.head = i; } } }; Integer.prototype.sub = function(y) { var carry = 0; this.head = 0; for(var i=0; i<40; i++){ var tmp = this.obj[i] - y.obj[i] + carry; carry = 0; if(tmp<0){ tmp += 10; carry = -1; } this.obj[i] = tmp; if(this.obj[i]>0){ this.head = i; } } }; Integer.prototype.toString = function() { var ret = ""; for(var i=this.head; i>=0; i--){ ret += this.obj[i].toString(); } return ret; }; function calc(x){ var dp = new Array(2); for(var i=0; i<2; i++){ dp[i] = new Array(2); for( var j=0; j<2; j++){ dp[i][j] = new Array(3); for(var k=0; k<3; k++){ //dp[i][j][k] = 0; dp[i][j][k] = new Integer(0); } } } dp[0][0][0] = new Integer(2); var ret = new Integer(0); var u = 0; var v = 1; var sz = x.length; for(var i=0; i<sz; i++){ for(var j=0; j<2; j++){ for(var k=0; k<3; k++){ dp[v][j][k] = new Integer(0); } } var w = x.charCodeAt(i) - "0".charCodeAt(0); for(var j=0; j<2; j++){ for(var k=0; k<3; k++){ for(var d=0; d<10; d++){ if(j===0 && w<d){ break; } var j_ = j; if(w>d){ j_ = 1; } var k_ = (k+d)%3; //dp[v][j_][k_] += dp[u][j][k]; dp[v][j_][k_].add(dp[u][j][k]); if(i===sz-1 && d%5===0){ //ret += dp[u][j][k]; ret.add(dp[u][j][k]); } if(i===sz-1 && k_===0){ //ret += dp[u][j][k]; ret.add(dp[u][j][k]); } } } } var tmp = u; u = v; v = tmp; } ret.sub(new Integer(4)); return ret; } function Main(input) { // inputにはすべての入力の文字列が与えられるので必要に応じて input.split("\n") などで分割する。 var data = input.split("\n"); var ans = calc(data[0]); console.log(ans.toString()); } // Don't edit this line! Main(require("fs").readFileSync("/dev/stdin", "utf8")); //Main("98765432123456789\n");