• D. Monitor Educational Codeforces Round 28


    http://codeforces.com/contest/846/problem/D

    二分答案

    适合于:

    判断在t时候第一次成立

    哪个状态是最小代价

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <time.h>
     6 #include <string>
     7 #include <set>
     8 #include <map>
     9 #include <list>
    10 #include <stack>
    11 #include <queue>
    12 #include <vector>
    13 #include <bitset>
    14 #include <ext/rope>
    15 #include <algorithm>
    16 #include <iostream>
    17 using namespace std;
    18 #define ll long long
    19 #define minv 1e-6
    20 #define inf 1e9
    21 #define pi 3.1415926536
    22 #define E  2.7182818284
    23 const ll mod=1e9+7;//998244353
    24 const int maxn=5e2+10;
    25 
    26 struct node
    27 {
    28     int x,y,t;
    29 }f[maxn*maxn];
    30 
    31 int K,s,t,a[maxn][maxn],tot[maxn][maxn]={0};
    32 
    33 int cmp(node a,node b)
    34 {
    35     return a.t<b.t;
    36 }
    37 
    38 bool judge()
    39 {
    40     int i,j;
    41     for (i=K;i<=s;i++)
    42         for (j=K;j<=t;j++)
    43             if (tot[i][j]-tot[i-K][j]-tot[i][j-K]+tot[i-K][j-K]==K*K)
    44                 return 1;
    45     return 0;
    46 }
    47 
    48 int main()
    49 {
    50     int q,i,j,l,r,m;
    51     scanf("%d%d%d%d",&s,&t,&K,&q);
    52     for (i=1;i<=q;i++)
    53         scanf("%d%d%d",&f[i].x,&f[i].y,&f[i].t);
    54 
    55     sort(f+1,f+q+1,cmp);
    56 
    57     l=1,r=q;
    58     while (l<=r)
    59     {
    60         memset(a,0,sizeof(a));
    61         m=(l+r)>>1;
    62 
    63         for (i=1;i<=m;i++)
    64             a[f[i].x][f[i].y]=1;
    65         for (i=1;i<=s;i++)
    66             for (j=1;j<=t;j++)
    67                 tot[i][j]=tot[i-1][j]+tot[i][j-1]-tot[i-1][j-1]+a[i][j];
    68         if (judge())
    69             r=m-1;
    70         else
    71             l=m+1;
    72     }
    73     if (l==q+1)
    74         printf("-1");
    75     else
    76         printf("%d",f[l].t);
    77     return 0;
    78 }
    79 /*
    80 2 2 2 4
    81 1 2 1
    82 1 1 4
    83 2 2 3
    84 2 1 2
    85 
    86 2 2 1 4
    87 1 2 1
    88 1 1 4
    89 2 2 3
    90 2 1 2
    91 
    92 2 2 2 0
    93 */
  • 相关阅读:
    TCP与UDP的差别以及TCP三次握手、四次挥手
    MAC帧格式、IPV4数据报格式、TCP报文格式、UDP数据报格式
    维特比算法(Viterbi)-实例讲解(暴力破解+代码实现)
    对ajax的理解
    get与post两种方式的优缺点
    什么是Ajax和JSON,它们的优缺点
    浅谈一下如何避免用户多次点击造成的多次请求
    ajax是什么?
    同步和异步的区别?
    如何解决跨域问题
  • 原文地址:https://www.cnblogs.com/cmyg/p/9520930.html
Copyright © 2020-2023  润新知