算法竞赛入门经典第二版习题选练

uva839 (递归来判断天平是否平衡)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<bitset>

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
#define pb(x) push_back(x)
#define cls(x, val) memset(x, val, sizeof(x))
#define fi first
#define se second
#define mp(x, y) make_pair(x, y)
#define inc(i, l, r) for(int i=l; i<=r; i++)
const int inf = 0x3f3f3f3f;
const int maxn = 2000+10;

bool solve(int& W){
    int w1, l1, w2, l2;
    cin>>w1>>l1>>w2>>l2;
    bool flag1, flag2;
    flag1 = flag2 = true;
    if(w1 == 0) flag1 = solve(w1);
    if(w2 == 0) flag2 = solve(w2);
    W = w1+w2;
    if(flag1&&flag2&&w1*l1 == w2*l2) return true;
    return false;
}


int main(){
    ios::sync_with_stdio(false);
    int _;
    cin>>_;
    int m;
    while(_--){
        if(solve(m)) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
        if(_) cout<<endl;
    }


    return 0;
}

四分树的递归统计

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<bitset>

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
#define pb(x) push_back(x)
#define cls(x, val) memset(x, val, sizeof(x))
#define fi first
#define se second
#define mp(x, y) make_pair(x, y)
#define inc(i, l, r) for(int i=l; i<=r; i++)
const int inf = 0x3f3f3f3f;
const int maxn = 2000+10;
const int len = 32;
char s[1024+10];
int ans = 0;
bool vis[len][len];

void draw(char *s, int &p, int r, int c, int w){
    char ch = s[p++];
    if(ch == 'p'){
        draw(s, p, r, c+w/2, w/2);
        draw(s, p, r, c, w/2);
        draw(s, p, r+w/2, c, w/2);
        draw(s, p, r+w/2, c+w/2, w/2);
    }
    else if(ch == 'f'){

        for(int i=r; i<r+w; i++){
            for(int j=c; j<c+w; j++){
                if(!vis[i][j]) {
                    vis[i][j] = true;
                    ans++;
                }
            }
        }

    }
}

int main(){
    ios::sync_with_stdio(false);
    int _;
    cin>>_;
    while(_--){
        cls(vis, 0);
        ans = 0;
        for(int i=0; i<2; i++){
            cin>>s;
            int p=0;
            draw(s, p, 0, 0, len);
        }
        cout<<"There are "<<ans<<" black pixels."<<endl;
    }

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/babydragon/p/11461915.html