2011-05-01から1ヶ月間の記事一覧

#include  空間、座標への対処

二次元座標を簡潔に書くのによさそう.コンストラクタ public member function complex (const T& re = T(), const T& im = T()); complex (const complex& cmplx); template complex (const complex& cmplx); // complex first (2.0,2.0); http://na-inet.j…

SRM451 div1 easy

1234 1234 1234 136974 みたいに足していく.これらは11とか、111とかで割り切れると気づいたら簡単.

SRM452 div2 easy

for使わなくても解ける. 80 84 88 88 = 8 * 11; 66 = 6 * 11; //なので、88-2*t = nが0<=t<=11で成り立つ時ans = 11になる。 |< >| int minCartons(int n) { int pack = n/8; if(n%8 == 0) return pack; if( n%2 == 0 && (pack+1)*6 <= n) return pack+1; r…

SRM453 div1 easy

//はじめに再帰で解いた. int TheBasketballDivOne::go(int num, int rem) { int cnt = 0; if(rem = 0; i--) { m_upper = i; cnt += go(num-1, rem-i); } m_upper = prev; return cnt; } できた(キリッ とか思ってたけど、 3)では、 (6, 3, 2, 1) (6, 4, 2,…

SRM459 div2 diff

E000 1000 1000 1000 のとき、 1 0 0 0 0 1 1 1 >1/(1+1+1) = 0.33333 double getProbability(vector <string> landings, int startLanding, int K) { int sz = landings.size(); double dp[K+1][sz]; //dp[cnt][the-number-of-landings] memset(dp, 0, sizeof dp); </string>…

SRM455 div1 easy

なんか迷路っぽい問題なので、深さ優先検索すれば良さげな感じだが、下の場合とかになるばあい、実装面でかなり難しくなる.どういう条件で曲がるかが不明瞭で、やたらめったら曲がると、n = 50のとき耐えられなくなってしまう. 000000000 0...0.0.0 0...0.…

SRM461 div2 difficult

はじめてまともに、動的計画法組めたような気がした。 めちゃくちゃ時間かかったけど。 今回メモするのは、 dp[入力したい文字の数+1][辞書順の順番] = 移動距離 2500*2500くらいなので、一応なんとかなるはず。 vectorは取り扱いがめんどくさくなるので、st…

SRM459 div2 difficult グラフ問題

ダイクストラ法を使って.とりあえず、最短経路を探ってみる.今回の問題は2番目に近い最短経路を求めれば良い. int messenger(int n, vector <string> highways) { Node node[n+1]; /*-----Input------*/ for(int i = 0; i < n+1; i++) { node[i].done = false; n</string>…

SRM463 div2 difficult

[1.2 1.3 1.5 1.8 2.1 2.9]とかのとき、 priority_queue, greater > que; ...でやればいいかなとおもったけど、それだと、[1.5 1.5 1.6 .1.7] -->9,9となる。 原因は、 3.3 * 3.0 = 9.9; //priority_queue (1.5+1.5)*(1.6+1.7) 3.2 * 3.1 = 9.92; //この違い…

SRM465 div2 easy

mapの使い方。 int numPairs(vector <int> numbers) { map<int, int> cnt; for(int i = 0, sz = numbers.size(); i < sz; i++) { stringstream ss; ss << numbers[i]; string str = ss.str(); sort(str.begin(), str.end()); int num; sscanf(str.c_str(), "%d", &num); cnt</int,></int>…

#define 一覧

#define ALL(x) (x).begin(), (x),end() #define SZ(x) *1 cout #include #include #include #include #include #include #include #include #include #include #include #define INF (1 pii; typedef pair dot; typedef long long LL; class DonutsOnTheGri…

SRM467 div2 easy

まぁ、簡単だけど、一応.accumulateは別にSTLとかじゃなくても使えるよ. int calculate(int k, int n) { int dp[k+1][n+1]; for(int i = 0; i < n+1; i++) { dp[0][i] = i; } for(int i = 1; i < k+1; i++) { for(int j = 0; j < n+1; j++) { dp[i][j] = a…

SRM468 div2 medium

div2 mediumにしてはかなり骨のある問題. {"", "", "", "", ..} -->{"223", "223", "334", ...}に変換してやるのが一番簡単かな. string message(vector part, vector dict, vector keystr) { char ch[26]; for(int i = 0; i //create table lexicographic…

SRM469 div1 easy

この問題はn, mがおおきいので、可能な場合の数から削っていく方針でやればいいわけですが. long long find(int n, int m, vector <int> row, vector <int> seat) { if(m == 1) return 0; int sz = row.size(); vector<pii> dot(sz); for(int i = 0; i < sz; i++) { dot[i]</pii></int></int>…

SRM471 div1 easy

まずはエラトステネスのふるいから解いてみる. int getLargestGenerator(int N, int D) { int dp[N+1]; vector list; list.push_back(-1); memset(dp, 0, sizeof dp); dp[2] = 1; set prime; prime.insert(2); set::iterator it; for(int i = 3; i (*it)*(*…

SRM471 div2 medium

0 --> 0, 1 1 --> 2 2 --> 0, 1 みたいになっている場合、Kの深さになったときのすべての場合の数を求める. //ちなみに重複は認める.自分自身がはいっていても問題ない. #include <iostream> #include <vector> using namespace std; const int sz = 3; const int K = 4; in</vector></iostream>…

SRM473 div2 medium

TIMESが4になっているので、無駄はあるが、殆ど速度に影響しないと思う. string whatHappens(vector <string> commands) { const int TIMES = 4; //right rotate int step[4][2] = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} }; int x = 0; int y = 0; int dir = 0; for(i</string>…

SRM476 div2 medium

まえできなかった臭いので。 int feedMost(vector <int> hunger, vector <int> greed, int totalFood) { int sz = hunger.size(); for(int i = sz; i >= 1; i--) { vector<int> eat(sz, 0); for(int j = 0; j < sz; j++) { eat[j] = hunger[j] + greed[j]* (i-1); } sort(ea</int></int></int>…

SRM480 div1 easy

新しく習うべきことはなし. vector determineWebsite(vector address, vector keyword, vector dangerous, int threshold) { int sz = address.size(); set word; for(int i = 0, len = dangerous.size(); i vector res; bool flag[sz]; memset(flag, false…

SRM483 div1 easy

printfとか、sprintfとかをがんばって駆使していく問題.まぁさ、anticipationで別に制限加えなくても、計算量的には余裕だけど、ループ大幅に減らせるからさ. string findFraction(int maxDen, string number) { double dicimal; sscanf(number.c_str(), "…

問題セット

nPr, nCrをもとめる 483, 分母がNまでの分数を昇順にして、k番目の値を求める。 フィボナッチ数列1~nの平均を求める(平均、桁落ち) ファレイ数列を使えば楽. 出力系 "5878!!!"みたいな文字をParseする やや難(SRM304改題) 多角形が長さ1膨張したときの増…

SRM424 div2 medium

100 -->4*5*5みたいにdigitを細小にする問題.実は簡単で、 int cnt = 0; for(int i = 9; i >= 2; i++) { while(n % i == 0) { cnt++; n /= i; } //いちいち素因数分解して、ということはやらなくていいのだ.

ループ特集

//[x,y] = [0,0]~[9,9]までの間で更新していく. for(int i = 0; i ans[k] = min(ans[k], sum); } } } //全探索 for(int i = 0; i int cnt = 0; while(cnt cnt++; } という風に、最後にcntをインクリメントさせるようにする。 例外は、 while(++cnt

キャストとか。

良くやるのがconstはずしと、 size_t -->intの型変換かなぁ. static_cast(size); const double f; const_cast(f); //メリハリの効いたコードを書こうと思えば、使った方が分かりやすい.

SRM437 div2 medium

貪欲法& 文字列操作 int findMax(int n, int K) { //1~9までは数字が1個しかないので、returnする. if(n < 10) return -1; stringstream ss; ss << n; string number = ss.str(); int sz = number.length(); //9000とかは swapむり。 if(number.substr(1) =…

SRM436 div2 easy

friends[i][j]--friends[j][k] ---> i -->kは友達になり、数が一つ増える.

SRM433 div2 medium

int count(vector S, int K) { int sz = S.size(); int order[sz]; for(int i = 0; i strmap; int res = 0; do { string str = ""; for(int i = 0; i string rotate = str + str; int len = str.length(); for(int i = 0; i ポイントはrotateするときに、二…

htmlパース 実験

単語を解析したかったので、組んでみた. #include <iostream> #include <fstream> #include <sstream> using namespace std; int main() { cout << "ファイル名入力(拡張子込み)で入力してください." << endl; string filename; cin >> filename; ifstream ifs(filename.c_str()); stri</sstream></fstream></iostream>…

単語 backup

RPG的な動作 jolt 揺さぶる strain 引っ張る proceed 進む preceed 先立つ,先導する manipulate 操作する 後退 setback detain 引き留めるほしい 要求 pretension extort 強要する ゆずる demise concess 譲歩する 欲 avarice 貪欲 greed 貪欲 allure 魅惑…

IO関連

sscanfでは[;]とかが無視されてしまう. sscanf(str.c_str(), "var see_ok_%s = %s;", word, flag); flag = ~~~;ってついちゃう. getline string型の欄にgetlineがある。http://www.cppreference.com/wiki/jp/io/getline #include istream& std::getline( i…