problemscpp
A collection of my answers to algorithm problems in c++.
载入中...
搜索中...
未找到
comp526::set 命名空间参考

class  card
 
class  cardset
 

函数

unsigned short calc_mask (card *c1, card *c2)
 
bool fit (card *c, const cardset *s)
 
int main (istream &cin, ostream &cout)
 
 TEST (set, case1)
 

变量

vector< vector< int > > ans = {}
 

函数说明

◆ calc_mask()

unsigned short comp526::set::calc_mask ( card * c1,
card * c2 )

在文件 comp526.cpp132 行定义.

132 {
133 unsigned short mask = 0;
134 for(int i = 0; i < 4; i++) {
135 mask <<= 1;
136 mask |= c1->f[i] == c2->f[i];
137 }
138 return mask;
139 }

引用了 comp526::set::card::f.

被这些函数引用 fit() , 以及 comp526::set::cardset::insert().

◆ fit()

bool comp526::set::fit ( card * c,
const cardset * s )

在文件 comp526.cpp162 行定义.

162 {
163 if(s->mask == (unsigned short) (-1)) {
164 return true;
165 }
166 for(auto &sc: s->cards) {
167 if(calc_mask(sc, c) != s->mask) {
168 return false;
169 }
170 }
171 return true;
172 }
unsigned short calc_mask(card *c1, card *c2)
unordered_set< card * > cards
unsigned short mask

引用了 calc_mask(), comp526::set::cardset::cards , 以及 comp526::set::cardset::mask.

被这些函数引用 main().

◆ main()

int comp526::set::main ( istream & cin,
ostream & cout )

在文件 comp526.cpp174 行定义.

174 {
175 cardset sets[1 << 10] = {};
176 int sets_cnt = 0;
177 string input;
178 for(int i = 1; i <= 12; i++) {
179 cin >> input;
180 card *newcard = new card(i, input);
181 for(int j = 0; j < sets_cnt; j++) {
182 if(fit(newcard, &sets[j])) {
183 cardset newset = sets[j];
184 newset.insert(newcard);
185 sets[sets_cnt++] = (newset);
186 }
187 }
188 cardset newset = cardset(newcard);
189 sets[sets_cnt++] = (newset);
190 }
191 if(ans.size() == 0) {
192 cout << "no sets";
193 return 0;
194 }
195 std::sort(ans.begin(), ans.end(), [](const vector<int> &a, const vector<int> &b) {
196 if(a[0] != b[0]) {
197 return a[0] < b[0];
198 } else if(a[1] != b[1]) {
199 return a[1] < b[1];
200 } else {
201 return a[2] < b[2];
202 }
203 });
204 for(const auto &s: ans) {
205 cout << s[0] << ' ' << s[1] << ' ' << s[2] << endl;
206 }
207 return 0;
208 }
bool fit(card *c, const cardset *s)
vector< vector< int > > ans

引用了 ans, fit() , 以及 comp526::set::cardset::insert().

被这些函数引用 TEST().

◆ TEST()

comp526::set::TEST ( set ,
case1  )

在文件 comp526_test.cpp144 行定义.

144 {
145 istringstream in("3DTG 3DOP 2DSG\n1SOP 1DTG 2OTR\n3DOR 3STG 2DSP\n3SSP 3OTG 1DTP\n");
146 auto out = ostringstream();
147 main(in, out);
148 const auto ans = out.str();
149 ASSERT_EQ("1 8 11\n2 9 12\n3 7 12\n5 7 9\n6 8 12\n7 10 11\n", ans);
150 }
int main(istream &cin, ostream &cout)

引用了 ans , 以及 main().

变量说明

◆ ans

vector<vector<int> > comp526::set::ans = {}

在文件 comp526.cpp126 行定义.

126{};

被这些函数引用 comp526::set::cardset::insert(), main() , 以及 TEST().