A了三题,rk1000左右应该可以上分啦,开。

后面的D,E比赛时就感觉可做,但又想不到方法。

然后我补了下,确实如此。

D - Minimax Problem

题意:很简单,给一个矩阵,找两行序列i,j,使得通过每个元素取当列最大合成出来的序列,最小值最大。

hit 1:比赛里我是真的有想二分,最小值最大,这不是经典二分答案套路嘛。

hit 2:比赛里我也是真的有注意到这个m <=8 给的很小,想以此为突破点干点啥?

然后要么太晚了,要么我做了三题自满了,总之没想到最终解法就睡觉了。

其实把二者结合起来,就可以A了这题了。一定注意 如果给的某个数字很小的话,可以二进制转化 。

也就是bitmask,英文好帅。

然后就二分答案,check的时候,对每个序列按是否大于等于你目标值转化成一个二进制串,再找有没有另一个二进制串满足两者通过 按位或  |   起来 得到一个完整的全部满足的全为1的串。

就没了。

贴个代码

 1 #include <bits/stdc++.h>
2 #ifndef ONLINE_JUDGE
3 #define debug(x) cout << #x << ": " << x << endl
4 #else
5 #define debug(x)
6 #endif
7 using namespace std;
8 typedef long long ll;
9 const int MAXN=3e5+7;
10 const int INF=0x3f3f3f3f;
11 const int MOD=1e9+7;
12
13 int a[MAXN][10],vis[300];
14 int ans1,ans2,n,m;
15
16 bool check(int x)
17 {
18 for(int i=0;i<(1<<m);++i) vis[i]=0;
19 for(int i=1;i<=n;++i)
20 {
21 int k=0;
22 for(int j=0;j<m;++j)
23 {
24 k+=(a[i][j]>=x)*(1<<j);
25 }
26 vis[k]=i;
27 }
28 for(int i=0;i<(1<<m);++i)
29 {
30 if(!vis[i]) continue;
31 for(int j=0;j<(1<<m);++j)
32 {
33 if(!vis[j]) continue;
34 if((i|j)==(1<<m)-1)
35 {
36 ans1=vis[i],ans2=vis[j];
37 return true;
38 }
39 }
40 }
41 return false;
42 }
43
44 int main()
45 {
46 ios::sync_with_stdio(false);
47 cin.tie(0);
48 cin>>n>>m;
49 for(int i=1;i<=n;++i)
50 for(int j=0;j<m;++j)
51 cin>>a[i][j];
52 int l=0,r=INF;
53 while(l<=r)
54 {
55 int mid=l+r>>1;
56 if(check(mid)) l=mid+1;
57 else r=mid-1;
58 }
59 cout<<ans1<<' '<<ans2<<endl;
60 return 0;
61 }

E - Messenger Simulator

题意:也非常的清晰明了,感觉以前在CF上也见过类似的,不过比这题简单的。就打电话,谁打了就把这个数提到前面。求每个数出现的最小和最大位置。

比赛时,我D想不出,看了眼E,真的有想树状数组维护,但主要我不知道咋移,啥时候哪个位置+1,-1。

然后发现看别人的程序基本就是正解。所以自己算法的思想大致还是到位的,但细部想不出呀。

这题思维的闪光点,主要就是开始时每个元素目前所在pos的设置,设置为i+m,就是预留了m个位置,给询问序列中的m个元素来移动,给开始n个元素的位置设置成虚点!

反正我第一次做是想不到。

别的都很好想,就是对每个询问,也就是给出的序列中给的值,动态的更新位置,并更新最大值,注意新位置应该是从m开始往前,也就是m~1。

树状数组的ask就是询问前缀和,也就是该元素当前处于第几个,也就是他的位置。

贴个代码

 1 #include <bits/stdc++.h>
2 #ifndef ONLINE_JUDGE
3 #define debug(x) cout << #x << ": " << x << endl
4 #else
5 #define debug(x)
6 #endif
7 using namespace std;
8 typedef long long ll;
9 const int MAXN=6e5+7;
10 const int INF=0x3f3f3f3f;
11 const int MOD=1e9+7;
12
13 int ans1[MAXN],ans2[MAXN],a[MAXN],pos[MAXN],sum[MAXN];
14 int n,m;
15
16 int lowbit(int x) {return x&(-x);}
17
18 void add(int x,int val)
19 {
20 while(x<MAXN)
21 {
22 sum[x]+=val;
23 x+=lowbit(x);
24 }
25 }
26
27 int ask(int x)
28 {
29 int res=0;
30 while(x)
31 {
32 res+=sum[x];
33 x-=lowbit(x);
34 }
35 return res;
36 }
37
38 int main()
39 {
40 ios::sync_with_stdio(false);
41 cin.tie(0);
42 cin>>n>>m;
43 for(int i=1;i<=n;++i)
44 {
45 ans1[i]=ans2[i]=i;
46 pos[i]=i+m;
47 }
48 for(int i=0;i<m;++i)
49 {
50 cin>>a[i];
51 ans1[a[i]]=1;
52 }
53 for(int i=1;i<=n;++i)
54 add(pos[i],1);
55 for(int i=0;i<m;++i)
56 {
57 int p=a[i];
58 ans2[p]=max(ans2[p],ask(pos[p]));
59 add(pos[p],-1);
60 pos[p]=m-i;
61 add(pos[p],1);
62 }
63 for(int i=1;i<=n;++i)
64 ans2[i]=max(ans2[i],ask(pos[i]));
65 for(int i=1;i<=n;++i)
66 cout<<ans1[i]<<' '<<ans2[i]<<'\n';
67 return 0;
68 }

Educational Codeforces Round 80 D E的更多相关文章

  1. Educational Codeforces Round 80 (Rated for Div. 2)

    A. Deadline 题目链接:https://codeforces.com/contest/1288/problem/A 题意: 给你一个 N 和 D,问是否存在一个 X , 使得 $x+\lce ...

  2. Educational Codeforces Round 80 A-E简要题解

    contest链接:https://codeforces.com/contest/1288 A. Deadline 题意:略 思路:根据题意 x + [d/(x+1)] 需要找到一个x使得上式小于等于 ...

  3. Educational Codeforces Round 80 (Rated for Div. 2)D E

    D枚举子集 题:https://codeforces.com/contest/1288/problem/D题意:给定n个序列,每个序列m个数,求第i个和第j个序列组成b序列,b序列=max(a[i][ ...

  4. Educational Codeforces Round 80 (Rated for Div. 2) E. Messenger Simulator

    可以推出 min[i]要么是i要么是1,当a序列中存在这个数是1 max[i]的话就比较麻烦了 首先对于i来说,如果还没有被提到第一位的话,他的max可由他后面的这部分序列中 j>=i 的不同数 ...

  5. Educational Codeforces Round 80 (Rated for Div. 2)部分题解

    A. Deadline 题目链接 题目大意 给你\(n,d\)两个数,问是否存在\(x\)使得\(x+\frac{d}{x+1}\leq n\),其中\(\frac{d}{x+1}\)向上取整. 解题 ...

  6. Educational Codeforces Round 80 (Rated for Div. 2)(A-E)

    C D E 这三道题感觉挺好       决定程序是否能通过优化在要求的时间内完成,程序运行时间为t,你可以选择花X天来优化,优化后程序的运行时间为t/(x+1)取上整,花费的时间为程序运行时间加上优 ...

  7. Educational Codeforces Round 80 (Rated for Div. 2)E(树状数组,模拟,思维)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ],mx[],a[],pos[],sum ...

  8. Educational Codeforces Round 80 (Rated for Div. 2)D(二分答案,状压检验)

    这题1<<M为255,可以logN二分答案后,N*M扫一遍表把N行数据转化为一个小于等于255的数字,再255^2检验答案(比扫一遍表复杂度低),复杂度约为N*M*logN #define ...

  9. Educational Codeforces Round 80 (Rated for Div. 2)C(DP)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ; ][],temp[][]; int ...

随机推荐

  1. PHP服务器端API原理及示例讲解(接口开发)

    http://www.jb51.net/article/136816.htm 下面小编就为大家分享一篇PHP服务器端API原理及示例讲解(接口开发),具有很好的参考价值,希望对大家有所帮助 相信大家都 ...

  2. 微信小程序wx.request 请求方法

    data: 最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String .转换规则如下: 对于 GET 方法的数据,会将数据转换成 quer ...

  3. tensorflow op tf.global_variables_initializer

    一.安装目前用了tensorflow.deeplearning4j两个深度学习框架, tensorflow 之前一直支持到python 3.5,目前以更新到3.6,故安装最新版体验使用. 慢慢长征路: ...

  4. 2019-8-15-win10-edge-打开闪退问题

    title author date CreateTime categories win10 edge 打开闪退问题 lindexi 2019-08-15 08:53:22 +0800 2019-8-1 ...

  5. UPC 2019年第二阶段我要变强个人训练赛第十六场

    传送门: [1]:UPC比赛场 [2]:UPC补题场 F.gu集合(数论) •题目描述 题目描述: Dew有一个长为n的集合S. 有一天,他想选k个不同的元素出来做游戏. 但是Dew只有两只手,所以他 ...

  6. SDNU ACM-ICPC 2019 Competition For the End of Term(12-15)山师停训赛题解

    马鸿儒 目前已补:01 03 06 07 08 09 10 11目前未补:02 04 05 12 苏用 1582.柳予欣的舔狗行为 1587.柳予欣的女朋友们在分享水果 1585.柳予欣和她女朋友的购 ...

  7. 实体Bean

    持久化实体管理EntityManager EntityManager 在Java persistence规范中,EntityManager是为所有持久化操作提供服务的中枢.Persistence co ...

  8. IE显示 “Promise”未定义,vue项目兼容ie的两种方案

    第一种方法: 直接在html中加入js链接: <script src = "https://cdn.polyfill.io/v2/polyfill.min.js">&l ...

  9. Java虚拟机-字节码执行引擎

    概述 Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,成为各种虚拟机执行引擎的统一外观(Facade).不同的虚拟机引擎会包含两种执行模式,解释执行和编译执行. 运行时帧栈结构 栈帧(Sta ...

  10. springBoot从入门到源码分析

    先分享一个springBoot搭建学习项目,和springboot多数据源项目的传送门:https://github.com/1057234721/springBoot 1. SpringBoot快速 ...