「プログラミング」カテゴリーアーカイブ

MNS

SRM148 Div2のhardが普通に解けたので記念に

719.20/1000

概要

数字が9個与えられ、魔法陣が作れる組み合わせはいくつか?

#include <algorithm>
#include <iostream>
#include <map>
#include <numeric>
#include <set>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
#define FOR(i,s,e) for (int i = int(s); i != int(e); i++)
#define FORIT(i,c) for (typeof((c).begin()) i = (c).begin(); i != (c).end(); i++)
#define ISEQ(c) (c).begin(), (c).end()
class MNS {
int rn(vector<int> number){
int a[3];
for(int i=0,n=0;i<=7;i+=3){
a[n] = number[i]+number[i+1]+number[i+2];
n++;
}
if(a[0]==a[1] && a[1]==a[2]) return a[0];
return -1;
}
int cn(vector<int> number){
int a[3];
for(int i=0,n=0;i<=2;i++){
a[n] = number[i]+number[i+3]+number[i+6];
n++;
}
if(a[0]==a[1] && a[1]==a[2]) return a[0];
return -1;
}
public: int combos(vector<int> numbers) {
int ans = 0;
sort(numbers.begin(),numbers.end());
do{
if(rn(numbers) == cn(numbers) && rn(numbers) != -1) ans++;
} while(next_permutation(numbers.begin(),numbers.end()));
return ans;
}
};

next_permutation() 最強です

動的計画法をついに理解しました。 グラフの勉強は全然進んでないですけども。 

明日はテストなので今日はテスト勉強に没頭しますw

dfsとbfsとstackとqueue

DFSは深さ優先探索のことでスタックを用いる

BFSは幅優先探索のことでキューを用いるっていうのは知っていて

幅優先探索のほうは理解できてたんだけど

深さ優先探索がスタックを用いるっていうのが今までわからず、さっきわかりましたw

ソースコードがよくわからなかったら手で再現したほうが早いですね

dfsのほうが再帰的に書くほうが楽なのでスタックで書くことはあんまりなさそうですけども。

ただスタックでdfsは上手くできてるなーと思いますw

 

クラス

今日はc++の文法を真面目に勉強しました。

復習から入ってようやくクラスに入りました。今日200pくらい進めてあと700pほど。

しかもここからほとんど新規事項というw

終わったらc++番テトリスを作成予定ですw