uva 12166 bfs

这一题与白书上的一题关于天平的题目有些相似

uva839

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

bool solve(int& w){
    int w1,w2,d1,d2;
    cin >> w1 >> d1 >> w2 >> d2;
    bool b1 = true,b2 = true;
    if(!w1) b1 = solve(w1);
    if(!w2) b2 = solve(w2);
    w = w1 + w2;
    return b1 && b2 && (w1*d1==w2*d2);
}

int main(){
    int T,w;
    cin >> T;
    while(T--){
        if(solve(w)) cout<<"YES\n";else cout<<"NO\n";
        if(T) cout<<"\n";
    }
    return 0;
}

这一题一开始并不怎么会做,是看别人结题报告的。

在这里结题报告

里面关于算法讲解的十分清楚

下面是代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <map>
#include <algorithm>
using namespace std;

string line;
map<long long,int> dic;
int sum;

void dfs(int depth,int s,int e){
    if(line[s] == ‘[‘){
        int pos = 0;
        for(int i = s+1 ; i < e;i++){
            if(line[i] == ‘[‘) pos++;
            if(line[i] == ‘]‘) pos--;
            if(pos==0 && line[i]==‘,‘){
                dfs(depth+1,s+1,i-1);
                dfs(depth+1,i+1,e-1);
            }
        }
    }
    else{
        long long w = 0;
        for(int i=s;i<=e;i++) w=w*10 + line[i]-‘0‘;
        sum++;
        dic[w<<depth]++;
    }
}

int main(){
    int T;
    cin >> T;
    while(T--){
        dic.clear();
        sum = 0;
        cin >> line;
        dfs(0,0,line.size()-1);
        int maxn = 0;
        for(map<long long,int>::iterator it = dic.begin(); it != dic.end(); ++it) maxn = max(maxn, it->second);
        cout<<sum-maxn<<endl;
    }
} 
时间: 2024-10-11 12:14:58

uva 12166 bfs的相关文章

UVA - 12041 BFS (Binary Fibonacci String)

Description Problem B - BFS (Binary Fibonacci String) We are familiar with the Fibonacci sequence (1, 1, 2, 3, 5, 8, ...). What if we define a similar sequence for strings? Sounds interesting? Let's see. We define the follwing sequence: BFS(0) = 0 BF

UVA 10085(bfs+康拓展开)八数码问题

Description Problem A The Most Distant State Input: standard input Output: standard output The 8-puzzle is a square tray in which eight square tiles are placed. The remaining ninth square is uncovered. Each tile has a number on it. A tile that is adj

UVA FILL(BFS + 优先队列)

Problem D FILL There are three jugs with a volume of a, b and c liters. (a, b, and c are positive integers not greater than 200). The first and the second jug are initially empty, while the third is completely filled with water. It is allowed to pour

Knight Moves (UVa 439) BFS

题目:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=839&page=show_problem&problem=380 思路:用 BFS 求出到终点的最短距离即可. 小技巧:用一个 dir 数组和两个 for 循环将与一个节点连接的八个节点枚举出来. /* Knight Moves (UVa 439) */ #include <iostream> #i

UVa 12166 修改天平

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3318 题意:给一个深度不超过16的二叉树,代表一个天平.每根杆悬挂在中间,每个秤砣的重量已知,至少修改多少个秤砣的重量才能让天平平衡? 要让天平平衡,必须以其中一个秤砣作为标准,然后修改其余的秤砣.当以深度为d,值为x的叶子节点作为标准时,可以发现此时天平的总质量为x<<d.

uva 816 BFS迷宫

这是一道比较复杂的BFS迷宫问题,状态由普通的迷宫问题的坐标(x,y)变为三个变量的状态(r,c,dir)其中dir是到达(r,c)两点的方向,这个变量非常重要,导致了这题比普通的BFS迷宫问题要更加复杂. 普通BFS解法 http://blog.csdn.net/iboxty/article/details/45888923 BFS是用队列实现的,很重要并且要理解的是:每一个节点只访问一次,而且每次BFS过程都保证压入队列中的节点到起点的距离是最短的,这题也有这样的思想. #include <

UVa 816 (BFS求最短路)

/*816 - Abbott's Revenge ---代码完全参考刘汝佳算法入门经典 ---strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:char * strchr (const char *str, int c) ---BFS求最短路 --*/ #define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<string.h> #include<queue> #include<al

UVA 439 BFS 骑士的移动

#include<iostream> #include<cstdio> #include<string> #include<string.h> #include<math.h> #include<queue> #include<map> #include<algorithm> using namespace std; int dx,dy; struct node{ int step; int x; int y;

UVA 11624 BFS

题意 一个房间着火了,房间为N*M大,由墙壁#和空地 . 组成.空地可以被火烧着,火每一秒向周围四块拓展.问一个房间里的人能不能逃离房间,人和火都不能穿过墙.如果能够逃出,最短的逃出时间是多少. 分析 有可能多个地方有火,每个有火的地方都要进行dfs,标记空地块的最少多少秒会被火所点着.对人dfs,看人到达每一块空地块最短的时间. 最后检查边界的空地(边界的空地即说明有门可以走出房间)块上的人的时间,和火烧到的最短时间.如果人比火块,纪录答案,更新最小答案即可. 代码 1 /* When all