Section 1.4 搜索

Arithmetic Progressions

http://www.wzoi.org/usaco/14%5C110.asp

并没有看出哪里像搜索。。大概是我蠢,暴力过去了

处理出所有的p^2+p^2的值,标记处有的值vis[i]

在其中枚举a,以1-a+(n-1)*b<=2*m*m的限制枚举b,检查是否有n位的存在

#include <bits/stdc++.h>
using namespace std;
const int N  = 140000;
bool vis[N];
int f[N>>1];
struct point{
    int a, b;
    point(){};
    point(int _a, int _b){a = _a, b = _b;};

    bool operator<(const point &I)const{
        if(b == I.b)    return a <I.a;
        return b <I.b;
    }
}p[10004];
int main()
{
    freopen("ariprog.in","r",stdin);
    #ifndef poi
    freopen("ariprog.out","w",stdout);
    #endif
    int n, m, i, j, k, a, b;
    cin >> n >> m;
    int id = 0, no = 0;
    for(i = 0; i <= m; i++){
        for(j = i; j <= m; j++) {
            f[++id] = i * i + j * j;
            vis[f[id]] = true;
        }
    }
    sort(f + 1, f + id + 1);
    id = unique(f + 1, f + id + 1) - f;
    int limit = 2 * m * m;
    for(i = 1; i < id; i++){
        a = f[i];
     //   printf("!!%d\n", a);
        for(j = 1; j*(n-1)+a <= limit; j++){
            for(k = 1; k < n; k++){
                if(!vis[j*k+a]) break;
            }
            if(k == n)  p[++no] = point(a, j);
        }
    }
    if(no == 0){
        printf("NONE\n");
        return 0;
    }
    sort(p + 1, p + no + 1);

    for(i = 1; i <= no; i++){
        printf("%d %d\n", p[i].a, p[i].b);
    }

    return 0;
}

Mother‘s Milk

http://www.wzoi.org/usaco/12%5C403.asp

真。搜索。。以(0, 0, C)为初始,bfs一下,当a为0时记录c的值,因为很小,避免去重用vis标记

#include <bits/stdc++.h>
using namespace std;

const int N = 22;
struct point{
    int a, b, c;

    point(){};
    point(int _a, int _b, int _c){a = _a, b = _b, c = _c;};
};
bool state[N][N][N], ok[N];
int A, B, C;
vector<int>ans;
void bfs(){
    state[0][0][C] = true;
    queue<struct point>Q;
    Q.push(point(0, 0, C));
    struct point x;
    int temp, a, b, c;
    while(!Q.empty()){
        x = Q.front();
        if(x.a == 0)   ok[x.c] = true;
      // cout << x.a << x.b << x.c << endl;
        Q.pop();
        if(x.a){
            if(x.b != B){
                temp = min(B-x.b, x.a);
                a = x.a - temp;
                b = x.b + temp;
                c = x.c;
               if(!state[a][b][c]){
                    Q.push(point(a, b, c));
                    state[a][b][c] = true;
                }
            }
            if(x.c != C){
                temp = min(C-x.c, x.a);
                a = x.a - temp;
                b = x.b;
                c = x.c + temp;
                if(!state[a][b][c]){
                    Q.push(point(a, b, c));
                    state[a][b][c] = true;
                }
            }
        }
        if(x.b){
            if(x.a != A){
                temp = min(A-x.a, x.b);
                a = x.a + temp;
                b = x.b - temp;
                c = x.c;
               if(!state[a][b][c]){
                    Q.push(point(a, b, c));
                    state[a][b][c] = true;
                }
            }
            if(x.c != C){
                temp = min(C-x.c, x.b);
                a = x.a;
                b = x.b - temp;
                c = x.c + temp;
               if(!state[a][b][c]){
                    Q.push(point(a, b, c));
                    state[a][b][c] = true;
                }
            }
        }
        if(x.c){
            if(x.a != A){
                temp = min(A-x.a, x.c);
                a = x.a + temp;
                b = x.b;
                c = x.c - temp;
               if(!state[a][b][c]){
                    Q.push(point(a, b, c));
                    state[a][b][c] = true;
                }
            }
            if(x.b != B){
                temp = min(B-x.b, x.c);
                a = x.a;
                b = x.b + temp;
                c = x.c - temp;
               if(!state[a][b][c]){
                    Q.push(point(a, b, c));
                    state[a][b][c] = true;
                }
            }
        }
    }

}
int main()
{
    freopen("milk3.in","r",stdin);
    #ifndef poi
    freopen("milk3.out","w",stdout);
    #endif
    cin >> A>> B>> C;

    bfs();
    bool first = true;
    for(int i = 0; i <= 20; i++){

        if(ok[i])  {
            if(!first)  cout << " ";
            cout << i;first = false;
        }

    }
    cout <<endl;

    return 0;
}

考研好痛苦。好羡慕保研的。。

时间: 2024-12-21 03:44:52

Section 1.4 搜索的相关文章

微信JS-SDK之地理位置的获取与在线导航,集成百度地图实现在线地图搜索

原创声明:本文来源于本人另一博客[微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索]原创作品,绝非他处摘取,转载请联系博主 本次讲解微信开发第三篇:获取用户地址位置信息,是非常常用的功能,特别是服务行业公众号,尤为需要该功能,本次讲解的就是如何调用微信JS-SDK接口,获取用户位置信息,并结合百度地铁,实现在线地图搜索,与在线导航. 官方文档地址:https://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.htm

Android下通过root实现对system_server中binder的ioctl调用拦截

Android下通过root实现对system_server中binder的ioctl调用拦截 分类: Android2013-06-19 18:09 779人阅读 评论(0) 收藏 举报 作 者: Passion时 间: 2012-10-18,13:53:53链 接: http://bbs.pediy.com/showthread.php?t=157419 Android下通过root实现对system_server中binder的ioctl调用拦截作者:passion2012-10-18关键

Vijos——T 1016 北京2008的挂钟 || 洛谷—— P1213 时钟

https://www.luogu.org/problem/show?pid=1213 题目描述 考虑将如此安排在一个 3 x 3 行列中的九个时钟: 目标要找一个最小的移动顺序将所有的指针指向12点.下面原表格列出了9种不同的旋转指针的方法,每一种方法都叫一次移动.选择1到9号移动方法,将会使在表格中对应的时钟的指针顺时针旋转90度. 移动方法 受影响的时钟 1 ABDE 2 ABC 3 BCEF 4 ADG 5 BDEFH 6 CFI 7 DEGH 8 GHI 9 EFHI Example

luogu P2744 [USACO5.3]量取牛奶Milk Measuring

题目描述 农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位——译者注) 他的最好的牛奶,并把它装入一个大瓶子中卖出.消费者要多少,他就给多少,从不有任何误差. 农夫约翰总是很节约.他现在在奶牛五金商店购买一些桶,用来从他的巨大的牛奶池中量出 Q 夸脱的牛奶.每个桶的价格一样.你的任务是计算出一个农夫约翰可以购买的最少的桶的集合,使得能够刚好用这些桶量出 Q 夸脱的牛奶.另外,由于农夫约翰必须把这些桶搬回家,对于给出的两个极小桶集合,他会选择“更小的”一个

u-boot(四)命令实现

目录 u-boot(四)命令实现 分析run_command 小结 自定义一个命令 代码 makefile title: u-boot(四)命令实现 tags: linux date: 2018-09-25 23:13:05 --- u-boot(四)命令实现 命令是如何实现的? 输入命令 执行函数,根据命令去寻找函数 所以会有一个命令的结构体[name,fun] 分析run_command 函数原型如下 int run_command (const char *cmd, int flag) 处

Section 1.5 也许这才是暴力搜索

Number Triangles 经典DP. 自控老师曾经用了一节课讲这道题..我以为我早就懂了,居然听不懂那一堆奇怪的公式.果然自控是天书. #include <bits/stdc++.h> using namespace std; const int N = 1004; int f[N][N], dp[N][N]; int main() { freopen("numtri.in","r",stdin); #ifndef poi freopen(&qu

ios UISearchDisplayController 实现 UITableView 搜索功能

UISearchDisplayController 是苹果专为 UITableView 搜索封装的一个类. 里面内置了一个 UITableView 用于显示搜索的结果.它可以和一个需要搜索功能的 controller 关联起来,其它的像原 TableView 和搜索结果 TableView 的切换, mask 的显示等等都 封装好了,使用起来非常非常的简单.特别是要实现全屏搜索时使用最多. 全屏搜索的意思是如果你用了  NavigationBar 当点击搜索框时 TableView 会自动弹上去

利用高德地图完成用户地图选址,包括搜索位置和标签固定居中

这两天一直捣鼓着地图的选址功能,需要达到的要求是:1,能用户定位  2,大头针固定在地图中心,拖动地图停止后获取到该大头针的位置信息    3,能通过搜索框搜索到我们输入的地址 主要思路:大头针分为两个   一个是用户的位置大头针  另一个是所选取的位置的大头针(包括拖动后的大头针和搜索功能查找到位置的大头针,公用一个大头针  )并且两个大头针都成为控制器器属性. 我使用到的高德地图sdk是: 'AMap3DMap' , '5.2.1' #高德3D地图 'AMapSearch' , '5.2.1

iOS UISearchController 搜索框

#import <Foundation/Foundation.h> @interface Student : NSObject @property(strong,nonatomic) NSString *name; @property(strong,nonatomic) NSString *pic; @property(strong,nonatomic) NSString *tel; -(Student *)initWithDic:(NSDictionary *)dic; +(Student