zoukankan      html  css  js  c++  java
  • 日常训练17-10-14

    题目链接:here

    Emptying the Baltic

    Kattis - emptyingbaltic
    题意:问给定位置的抽水机需要排多少水(水从高往低流)。
    类似最短路~
     1 /*************************************************************************
     2     > File Name: temp.cpp
     3     > Author: yijiull 
     4     > Mail: 1147161372@qq.com 
     5     > Created Time: 2017年10月15日 星期日 09时56分36秒
     6  ************************************************************************/
     7 
     8 #include<iostream>
     9 #include <bits/stdc++.h>
    10 
    11 using namespace std;
    12 const int maxn = 510;
    13 int p[maxn][maxn], vis[maxn][maxn];
    14 long long ans;
    15 
    16 struct Node{
    17     int x, y;
    18     int dep;
    19     Node(int x,  int y, int dep): x(x), y(y), dep(dep){}
    20     bool operator < (const Node &a)const {
    21         return dep > a.dep;
    22     }
    23 };
    24 int n, m;
    25 int sx, sy;
    26 
    27 int d[8][2]={0, 1, 0, -1, 1, 0, 1, 1, 1, -1, -1, 0, -1, 1, -1, -1};
    28 
    29 int ck(int x, int y){
    30     return x>=0&&x<n && y>=0&&y<m && !vis[x][y] && p[x][y] < 0;
    31 }
    32 
    33 void bfs(){
    34     priority_queue<Node> q;
    35     memset(vis, 0, sizeof(vis));
    36     ans = -p[sx][sy];
    37     q.push(Node(sx, sy, p[sx][sy]));
    38     vis[sx][sy] = 1;
    39     while(!q.empty()){
    40         Node now = q.top();
    41         q.pop();
    42         int x = now.x, y = now.y, dep = now.dep;
    43         for(int i = 0; i < 8; i++){
    44             int dx = x + d[i][0];
    45             int dy = y + d[i][1];
    46             if(ck(dx, dy)){
    47                 vis[dx][dy] = 1;
    48                 ans -= max(dep, p[dx][dy]);
    49                 q.push(Node(dx, dy, max(p[dx][dy], dep)));
    50             }
    51         }
    52     }
    53 }
    54 
    55 int main(){
    56     scanf("%d %d", &n, &m);
    57     for(int i = 0; i < n; i++){
    58         for(int j = 0; j < m; j++){
    59             scanf("%d", &p[i][j]);
    60         }
    61     }
    62     scanf("%d %d", &sx, &sy);
    63     sx--; sy--;
    64     bfs();
    65     printf("%lld
    ", ans);
    66 }
    View Code

    Distinctive Character

     Kattis - distinctivecharacter 

    题意:给n个长度为k的01串, 让求一个长度为k的01串,使得该串和给出的n个串相似度最大值最小.

    转换成不相似度最小值最大(?)  --  异或?

    然后bfs~

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 1<<21;
     4 const int inf = 0x3f3f3f3f;
     5 int d[maxn];
     6 int n, k;
     7 char s[25];
     8 int main(){
     9     queue<int> q;
    10     memset(d, inf, sizeof(d));
    11     scanf("%d %d", &n, &k);
    12     for(int i = 0; i < n; i++){
    13         scanf("%s", s);
    14         int x = 0;
    15         for(int j = 0; j < k; j++){
    16             x |= (s[j]-'0')<<(k-1-j);
    17         }
    18         q.push(x);
    19         d[x] = 0;
    20     }
    21     int ans = -inf;
    22     int id;
    23     while(!q.empty()){
    24         int u = q.front();
    25         q.pop();
    26         for(int i = 0; i < k; i++){
    27             int v = u^(1<<i);
    28             if(d[v] != inf) continue;
    29             d[v] = d[u] + 1;
    30             q.push(v);
    31             if(d[v] > ans) {
    32                 ans = d[v];
    33                 id = v;
    34             }
    35         }
    36     
    37     }
    38     int cnt = k-1;
    39     for(int i = 0; i < k; i++){
    40         s[cnt--] = (id&1) + '0';
    41         id>>=1;
    42     }
    43     puts(s);
    44 }
    View Code
  • 相关阅读:
    mysql用户授权及数据备份恢复
    mysql数据库导入导出 查询 修改表记录
    mysql数据库 索引 事务和事务回滚
    mysql数据库基本使用(增删改查)
    B-Tree 和 B+Tree
    网络七层模型及TCP、UDP,一次HTTP请求都发生了什么
    堆排、python实现堆排
    Linux 文件系统
    现有n 个乱序数,都大于 1000 ,让取排行榜前十,时间复杂度为o(n), top10, 或者 topK,应用场景榜单Top:10,堆实现Top k
    Ajax 基础
  • 原文地址:https://www.cnblogs.com/yijiull/p/7670323.html
Copyright © 2011-2022 走看看