zoukankan      html  css  js  c++  java
  • HDU 5968:异或密码(暴力)

    http://acm.hdu.edu.cn/showproblem.php?pid=5968

    题意:中文题意。

    思路:一开始不会做,后来发现数据范围很小,而且那个数要是连续的,所以可能把所有情况枚举出来很小吧。打了个表发现 100 只有 4950 个,然后直接暴力枚举每一种情况,放在Hash里面标记是否出现过这个数,再弄一个len数组放置每一种情况长度,然后对答案分别向左和向右找最长的长度就好了。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 #include <string>
     7 #include <iostream>
     8 #include <stack>
     9 #include <map>
    10 #include <queue>
    11 using namespace std;
    12 #define N 100010
    13 #define INF 0x3f3f3f3f
    14 bool Hash[N];
    15 int len[N];
    16 //vector<int> v;
    17 int num[105];
    18 int main()
    19 {
    20     int t;
    21     scanf("%d", &t);
    22     while(t--) {
    23         int n;
    24         scanf("%d", &n);
    25         for(int i = 1; i <= n; i++) scanf("%d", &num[i]);
    26         memset(Hash, 0, sizeof(Hash));
    27         memset(len, 0, sizeof(len));
    28         for(int i = 1; i <= n; i++) {
    29             for(int j = 1; j + i - 1 <= n; j++) {
    30                 int tmp = 0;
    31                 for(int k = 0; k < i; k++) {
    32                     tmp ^= num[k + j];
    33                 }
    34                 Hash[tmp] = 1;
    35                 len[tmp] = max(len[tmp], i);
    36 //                v.push_back(tmp);
    37             }
    38         }
    39 //        puts("----------------");
    40 //        for(int i = 0; i < v.size(); i++) printf("%d ", v[i]);
    41 //        puts("");
    42 //        puts("----------------");
    43         int q;
    44         scanf("%d", &q);
    45         while(q--) {
    46             int ask;
    47             scanf("%d", &ask);
    48             int l = 0, ans = -1;
    49             bool f = 0;
    50             while(!f) {
    51                 if(ask - l >= 0 && Hash[ask-l]) {
    52                     ans = len[ask-l];
    53                     f = 1;
    54 //                    printf("1 : %d, %d
    ", ask - l, ans);
    55                 }
    56                 if(Hash[ask+l]) {
    57                     ans = max(len[ask+l], ans);
    58 //                    printf("2 : %d, %d
    ", ask + l, ans);
    59                     f = 1;
    60                 }
    61 
    62                 l++;
    63             }
    64             printf("%d
    ", ans);
    65         }
    66         puts("");
    67     }
    68     return 0;
    69 }
  • 相关阅读:
    IIS 您要访问的网页有问题,无法显示!
    windows系统添加删除用户命令!
    ASP跨域调用Webservices方法
    ASP 编码转换(乱码问题解决)
    Jquery控制滚动显示欢迎字幕v2
    iframe框架嵌套技巧(全屏,去双滚动条)
    ASP CDONTS.NEWMAIL组件发送电邮(附下载)
    ASP FORM表单提交判断
    使用js代码将HTML Table导出为Excel
    获得第二大的元素
  • 原文地址:https://www.cnblogs.com/fightfordream/p/6034883.html
Copyright © 2011-2022 走看看