ZOJ 刷题集

开始刷ZOJ,希望能有一个新的开始,新的机会
2019/11/21
开始刷ZOJ,希望能有一个新的开始,新的机会
题意 : 大致就是一个矩阵模型,X为墙,保证每个人都不能相互看到,求这种情况下的可以最多加入的人的个数
题解 : 大致推算出复杂度,暴力解决问题

/*  
 * 2019/11/21 * 因为N最大为4,所以可以枚举所有情况,复杂度为2^(N*N)  
 * 暴力求解  
 */
#include   
#include   
using namespace std;  
const int MAXN = 5;  
char s[MAXN][MAXN];  
int t[MAXN][MAXN];  
int N;  
int max(int a,int b){  
    return a>b?a:b;  
}  
int row(int x,int y){  
    for(int i=x+1;i=0;i--){  
        if(s[i][y]=='X')break;  
        if(t[i][y])return 0;  
    }  
    return 1;  
}  
int cloumn(int x,int y){  
    for(int i=y+1;i=0;i--){  
        if(s[x][i]=='X')break;  
        if(t[x][i])return 0;  
    }  
    return 1;  
}  
int slove(int M){  
    int cnt=0;  
    for(int i=0;i

ZOJ 1003
题意:标有序号1~100的100个气球,两个人扎,每个人的分数为自己所扎气球的成绩,现在给出两个人的成绩,成绩低的人要申诉,如果申诉成功输出低成绩,否则输出高的成绩。(申诉条件:说出自己所扎的气球,证明高成绩无法的到改成绩)
题解:从1~100个气球递归遍历一遍,看是否满足低成绩的申诉。

/**  
 * 题意难理解,看了好久 2333 
**/
#include   
#include   
using namespace std;  
bool fa,fb;  
void bfs(int a,int b,int k){  
    if(b==1){  
        fb=true;  
        if(a==1)fa=true;  
    }  
    if(k==1||(fa&&fb))return;  
    if(a%k==0){  
        bfs(a/k,b,k-1);  
    }  
    if(b%k==0){  
        bfs(a,b/k,k-1);  
    }  
    bfs(a,b,k-1);  
}  
int main(){  
    int N,M;  
    while (scanf("%d%d",&N,&M)!=EOF&&(N||M)){  
        if(N

ZOJ 1004
题意:给两个单词A、B,一个栈,写出所有的进栈出栈的操作,枚举出所有的进出栈结果。
题解:模拟求一遍,递归 + 栈。

#include   
#include   
#include   
#include   
#include   
#include   
using namespace std;  
vectorx;  
stacky;  
string s,t;  
void DFS(int a,int b,int len){  
    if(a==len&&b==len){  
        for(int i=0;i>s>>t){  
        x.clear();  
        while(!y.empty())y.pop();  
        cout<<"["<

ZOJ 1005
题意:经典的倒水问题
题解:辗转相减法

/* *  
 * 2019/11/22 * 拓展欧几里得,使用辗转相减解决  
 * */
#include   
using namespace std;  
int main(){  
    int A,B,C;  
    while(scanf("%d%d%d",&A,&B,&C)!=EOF){  
        int b=0;  
        if(B==C){  
            printf("fill B\n");  
        }  
        else  
        while(b!=C){  
            printf("fill A\npour A B\n");  
            b=A+b;  
            if(b>=B){  
                printf("empty B\npour A B\n");  
                b-=B;  
            }  
        }  
        printf("success\n");  
    }  
    return 0;  
}

你可能感兴趣的:(ZOJ 刷题集)