読者です 読者をやめる 読者になる 読者になる

Tamflexの貯蔵庫

やる気のない備忘録

codeIQ 1621

なんとなくlower_boundでやりたかった. vector<ll> p; void init() { p.resize(10000); fill(p.begin(),p.end(),1LL<<30); int m = 0; p[m++] = 2; for(int i=3;i<=100000;i+=2) { bool flag = true; for(int j=0;p[j]*p[j]<=i;j++) { if(i%p[j]==0) { flag = fa</ll>…

codeIQ 1630

abc029にも似た, というかほぼ同じな問題があった. 念の為long long intを用いて解いた. void solve(ll n) { n++; ll d = 1, t, ans = 0; while(n>d) { t = d; d *= 10; ans += (n/d)*t+(n%d>t*7?(n%d>=t*8?t:(n%d)%t):0); } cout << ans << "\n"; } int mai…

codeIQ 1678

count{|a|...}はブロックの返り値でtrueとなるもののみをcountする. b,e=gets.split(',').map(&:to_i);$><<[*b+1..e-1].count{|a|a.to_s(2).reverse==a.to_s(2)}

codeIQ 2767

説明が不十分だと思うのだけど, 同じ類似度の時にインデックスの小さい方を先に出さないとtest case2で落ちる. int tn; vector<int> ns; vector<int> tmp; int norm(vector<int> v) { int ans = 0; int until = v.size()-1; FOR(i,1,until) ans+=v[i]*v[i]; return ans; } i</int></int></int>…

codeIQ 2751

図形に関して, 3*7の長方形を3個つなげた対称性の高い空間だと言える. これらの長方形をそれぞれworld 0,1,2として範囲外に出たら「奈落」/「ワープ」させる条件分岐を書けばわかりやすいかもしれない. 文字の変換についてだが, こちらもASCIIコードを駆使し…

codeIQ 2529

codeiq.jpf,gは割と簡単だけど,hが面倒. #include <bits/stdc++.h> #define EPS 1e-10 ll power(ll x,ll n){ll a=1;REP(i,n)a*=x;return a;} ll f(double a, double b, double c, double d) { double e = 180-(b+c+d); double f = 180-(a+b+c); a *= M_PI/180; b *= M_PI/18</bits/stdc++.h>…

codeIQ 2717

dfsで全探索する. int n; vector<int> a; int dfs(int k, int sum) { if(k==a.size()) return sum; int x = dfs(k+1,sum+a[k]); int y = dfs(k+1,sum); return abs(n-x)<abs(n-y)? x : y; } int main() { int t; cin >> n; while(cin >> t) a.push_back(t); sort(a.begin(),a.end()); cout << abs(n-dfs(0,0)) <</abs(n-y)?></int>…

codeIQ 2796

codeiq.jp期待値を計算すればよい あとはargminなので以下のように簡略化できる. p [*1..n=eval(*$<)].max_by{|t|(n-t).to_f*(n+t-1)/(n+1-t)}

codeIQ 2791

codeiq.jp例によってdfsとメモ再帰で解けます. struct P { int x; int y; P(){}; P(int x,int y):x(x),y(y){}; P operator+(const P&q){P t;t.x=x+q.x;t.y=y+q.y;return t;} P operator+=(const P&q){x+=q.x;y+=q.y;return *this;} bool operator!=(const P&…

codeIQ 2769

よくよく考えればルートの長さはたかだか2種類しかないとわかる. a,b=gets.split(',').map &:to_i p x=a.lcm(b),x==a*b ?x:x*2

codeIQ 2740

正規表現 (Ruby 1.9.3) キャプチャを使ってあげれば一瞬で解ける. x=/(?<a>.)(?<b>.)\k<a>/;$<.map{|s|s=s.sub(x,$2)while x=~s;$><</a></b></a>

codeIQ 2749

オセロのAIと同じ要領でできる. 初手判定に要注意 int a[25]; int dx[] = {1,1, 1, 0,-1,-1,-1,0}; int dy[] = {1,0,-1,-1,-1, 0, 1,1}; vector<string> split(const string &str, char delim) { istringstream iss(str); string tmp; vector<string> res; while(getline(iss</string></string>…

codeIQ 2730

n=(a=$<.map &:to_s).count{|s|s[0]=='#'} puts"code:#{a.count-n}\ncomments:#{n}"

codeIQ 2685

https://codeiq.jp/q/2685(404になっていたので説明すると,順次追加される数字に対し, それまで追加された数の集合のメジアンを求めさせる問題, だったはず)参考にしたのはこれ↓ でもこれだと負の数に対応できないので無理やり大きい数を足して調整している.…

codeIQ 2683

F(n) = [n*log10(n)] ([x]はxより大きい最小の整数) と定義されるとき G(m) = n (F(n) = m) となるようなnを求めよ, という問題. 2≦m≦1e10なので大体nの範囲は1~1e9程度, なので多めに見積もって1~1e10の範囲を二分探索すれば一瞬で求まる. void solve(ll …

codeIQ 2669

codeiq.jp「やるだけ」なのかもしれないけどどうもエレガントに書けない. 問題では分割していたけれど, 逆に条件に合うような長方形を生成すれば高々O(2^n)のコストで済み, また条件に合わないときに枝刈りすればもっと計算量は減らせる. mは1000以下の縛り…