// 我的第1题AC代码
#include <iostream>
#include <vector>
using namespace std;
int M, N, P = 0, Q = 0;
void search(vector<vector<int>> &G, int i, int j, int &Max) {
if (i < 0 || i >= M || j < 0 || j >= N)
return;
if (G[i][j] == 1) {
G[i][j] = 0; Max += 1;
search(G, i - 1, j, Max); search(G, i + 1, j, Max);
search(G, i, j - 1, Max); search(G, i, j + 1, Max);
search(G, i - 1, j + 1, Max); search(G, i + 1, j - 1, Max);
search(G, i - 1, j - 1, Max); search(G, i + 1, j + 1, Max);
}
}
int main()
{
scanf("%d,%d", &M, &N);
vector<vector<int>> G(M, vector<int>(N));
for (int i = 0; i < M; ++i)
for (int j = 0; j < N; ++j)
scanf("%d,", &G[i][j]);
for (int i = 0; i < M; ++i) {
for (int j = 0; j < N; ++j) {
if (G[i][j] == 1) {
int Max = 0; P++;
search(G, i, j, Max);
if (Max > Q) Q = Max;
}
}
}
cout << P << "," << Q;
return 0;
}
// 我的第2题AC代码
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct region {
int l, r;
};
region str2region(const string &s) {
struct region res;
int a = s.find(',');
res.l = stoi(s.substr(0, a));
res.r = stoi(s.substr(a + 1, s.length() - 1));
return res;
}
struct compare {
bool operator() (region a, region b) {
if (a.l != b.l)
return a.l < b.l;
else
return a.r < b.r;
}
};
int main() {
int m, a;
string s, r;
vector<region> regions;
cin >> m;
for (int i = 0; i < m; ++i) {
cin >> s;
while ((a = s.find(';')) != -1) {
r = s.substr(0, a);
s = s.substr(a + 1, s.length() - 1);
regions.push_back(str2region(r));
}
regions.push_back(str2region(s));
}
sort(regions.begin(), regions.end(), compare());
for (int i = 0; i < regions.size() - 1; ++i) {
if (regions[i].r >= regions[i + 1].l) {
regions[i].r = regions[i + 1].r;
regions.erase(regions.begin() + i + 1);
--i;
}
}
int i;
for (i = 0; i < regions.size() - 1; ++i)
cout << regions[i].l << ',' << regions[i].r << ';';
cout << regions[i].l << ',' << regions[i].r << endl;
return 0;
}
// 我的第5题AC代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Anchor {
int s, e;
};
struct compare {
bool operator() (Anchor a, Anchor b) {
if (a.e != b.e)
return a.e < b.e;
else
return a.s < b.s;
}
};
int main() {
int N, M, res = 0, curr = 0;
cin >> N >> M;
Anchor anchor;
vector<Anchor> anchors;
for (int i = 0; i < N; ++i) {
cin >> anchor.s >> anchor.e;
if (anchor.e < anchor.s && anchor.e == 0)
anchor.e += N;
if (anchor.e >= anchor.s)
anchors.push_back(anchor);
}
sort(anchors.begin(), anchors.end(), compare());
for (int i = 0; i < anchors.size(); ++i) {
if (curr <= anchors[i].s) {
res++;
curr = anchors[i].e;
}
}
cout << res << endl;
return 0;
}
// 第3题20% 哎 - -~!浪费了太多时间
/* 我的思路是转换成0-1背包问题的,先取若干张卡,然后用canDivide判断这些卡片
* 能不能被分为和相等的两组,我的直觉感觉我的canDivide有问题,时间紧没有去推导
* 然后canDivide传入的参数已经从大到小排列了的。
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Card {
int person;
int group;
};
struct compare {
bool operator() (Card a, Card b) {
if (a.person != b.person)
return a.person > b.person;
else
return a.group > b.group;
}
};
bool canDivide(const vector<Card> &cards) {
int res = 0, i;
for (i = 0; i < cards.size(); i++) {
if (res > 0)
res -= cards[i].person;
else
res += cards[i].person;
}
return res == 0;
}
int sumCard(const vector<struct Card> &cards) {
int i;
int sum = 0;
for (int i = 0; i < cards.size(); i++)
sum += cards[i].group;
return sum;
}
int bag(const vector<Card> &cards, vector<Card> curr, int i) {
if (i == cards.size()) {
if (canDivide(curr))
return sumCard(curr);
else
return 0;
}
else {
int a = bag(cards, curr, i + 1);
curr.push_back(cards[i]);
int b = bag(cards, curr, i + 1);
return a > b ? a : b;
}
}
int main() {
int n;
vector<Card> cards, curr;
Card card;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> card.person >> card.group;
cards.push_back(card);
}
sort(cards.begin(), cards.end(), compare());
cout << bag(cards, curr, 0) << endl;
return 0;
}
// 第3题最后没时间了,投机取巧拿了40%
#include <cstdio>
using namespace std;
int main() {
int n;
scanf("%d", &n);
int sum = 0;
for(int i = 0; i < n; ++i) {
int a, b;
scanf("%d %d", &a, &b);
sum += b;
}
printf("%d", sum);
}
// 第4题60% 哎 - -~! 不想说啥了,***难受~! 代码就不发了,惭愧~!!!