[日常水题 3.16] codeforce 948A, 949A

948 A. Protect Sheep

  • 描述(略)
  • 所有空地放犬,如果所有狼上下左右都没有羊,则安全。
  • 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;    
}  

949 A. Zebras

  • 描述(略)
  • 思路:用优先队列利用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,其实不太需要算法,多思考可以提高编程思维。
厚积薄发,一年后爬分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值