- 描述(略)
- 所有空地放犬,如果所有狼上下左右都没有羊,则安全。
- code
#include <bits/stdc++.h>
//#define LOCAL_DEFINE
#define for0(i, n) for(int i = 0; i < n; i++)
using namespace std;
char mp[505][505];
const int dx[]={1,0,-1,0};
const int dy[]={0,1,0,-1};
int main() {
ios::sync_with_stdio(false);cin.tie(0);
#ifdef LOCAL_DEFINE
freopen("input.txt", "rt", stdin);
#endif
int r, c;
char ch;
bool bo = false;
cin >> r >> c;
for0(i, r) {
for0(j, c) {
cin >> ch;
if(ch == '.') ch = 'D';
mp[i][j] = ch;
}
}
for0(i, r) {
for0(j ,c) {
if(mp[i][j] == 'S') {
for0(k, 4) {
int tx = i + dx[k];
int ty = j + dy[k];
if (!(tx >= 0 && tx < r && ty >= 0 && ty < c)) continue;
if(mp[tx][ty] == 'W')
bo = true;
}
}
}
}
if(bo == true) cout << "No" << endl;
else {
cout << "Yes" << endl;
for0(i, r) {
for0(j, c) {
cout << mp[i][j];
}
cout << endl;
}
}
#ifdef LOCAL_DEFINE
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
- 描述(略)
- 思路:用优先队列利用0,1的变更去增加子序列nlogn。看别人的代码感觉用普通队列也可以,甚至可以不用队列保存状态。。还是要多思考多学习。
#include <bits/stdc++.h>
//#define LOCAL_DEFINE
using namespace std;
const int maxn = (int)2e6 + 10;
priority_queue<int, vector<int>, greater<int> > q0, q1;
//queue<int> q0, q1;
vector<int> v[maxn];
int cnt;
int main(void) {
ios::sync_with_stdio(false);cin.tie(0);
#ifdef LOCAL_DEFINE
freopen("input.txt", "rt", stdin);
#endif
string s;
cin >> s;
for(int i = 0, x; i < (int)s.size();i++) {
if(s[i] == '0') {
if(q1.empty()) {
x = ++cnt;
v[x].push_back(i);
q0.push(x);
}
else {
x = q1.top();
q1.pop();
v[x].push_back(i);
q0.push(x);
}
}
else if(s[i] == '1') {
if(q0.empty()) puts("-1"), exit(0);
else {
x = q0.top();
q0.pop();
v[x].push_back(i);
q1.push(x);
}
}
}
if(!q1.empty()) puts("-1"), exit(0);
else {
cout << cnt << endl;;
for(int i = 1; i <= cnt; i++) {
cout << (int)v[i].size();
for(int j = 0; j <(int)v[i].size(); j++)
cout << " " << v[i][j] + 1;
cout << endl;
}
}
#ifdef LOCAL_DEFINE
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int maxn = (int)2e6 + 10;
vector<int> v[maxn];
string s;
int sum, temp;
int main(void) {
ios::sync_with_stdio(false);cin.tie(0);
#ifdef LOCAL_DEFINE
freopen("input.txt", "rt", stdin);
#endif
cin >> s;
for(int i = 0; i < (int)s.size(); i++) {
if(s[i] == '0') {
if(temp == 0) {
v[++sum].push_back(i);
}
else {
v[temp--].push_back(i);
}
}
else if(s[i] == '1') {
v[++temp].push_back(i);
if(temp > sum) puts("-1"), exit(0);
}
}
if(temp != 0) puts("-1"), exit(0);
cout << sum << endl;
for(int i = 1; i <= sum; i++) {
cout << (int)v[i].size();
for(auto j :v[i]) {
cout << " " << j + 1;
}
cout << endl;
}
#ifdef LOCAL_DEFINE
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
每天复习完坚持水水题,一套cf的 A-C,其实不太需要算法,多思考可以提高编程思维。
厚积薄发,一年后爬分。