题目:

有$?$张卡片,每张卡片有正反两面。正面和反面一共有$1, 2, ..,?$这$?$个数,有些数在正面,有些在反面,但是不会有数同时存在于两个面。这$?$张卡片排成一排,标号为$1, 2, .., ?$。

进行$?$次询问,每次给出两个数$?, ?(? ≤ ?)$,定义$?(?, ?)$为所有在第$?, ? + 1, .., ?$张卡片的正面出现过的数的平方和。你可以随意将卡片翻面,使得$?(?, ?)$最大化,输出这个值。

思路:

首先如果每次都选择占没被选中部分的一半以上的方案,至多 $log_{2}^{m}$ 次就能得到全集。

所有当区间长度大于 $log_{2}^{m}$ 的时候直接得到答案。

对于区间长度小的部分暴力求效率是 $O(m^{2}n)$ 。

至少我们发现对于一个数字如果不选,意味着所有包含这个数字的那面都得朝下,只有一种。所以我们去看至少能有几个数不选。总权值减去最小价值即为答案。

代码:

#include<bits/stdc++.h>
#define il inline
#define LL long long
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
const int N=2e6+5;
int n,m,Q,a[N],Lg;
LL sum,val[N];
vector<int> v[N];
vector<LL> ans[N];
il int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return f*x;
}
int main()
{n=read();m=read();Q=read();Lg=log2(m)+1;for(int i=1;i<=m;i++)sum+=1ll*i*i;for(int i=1;i<=n;i++){v[i].resize(m+2);int x=read();for(int j=1;j<=x;j++)v[i][read()]=1;}for(int l=1;l<=n;l++){ans[l].resize(Lg+1);for(int i=1;i<=m;i++)a[i]=0;for(int r=l;r<=min(n,l+Lg);r++){for(int i=1;i<=m;i++)a[i]=(a[i]<<1)|v[r][i],val[a[i]]+=1ll*i*i;LL res=sum;for(int i=0;i<(1<<(r-l+1));i++)res=min(res,val[i]),val[i]=0;ans[l][r-l]=sum-res;}}while(Q--){int l=read(),r=read();if(r-l+1>Lg)printf("%lld\n",sum);else printf("%lld\n",ans[l][r-l]);}return 0;
}

View Code

转载于:https://www.cnblogs.com/Jessie-/p/11015190.html

dtoj#4360. 魔法卡片(magic)相关推荐

  1. excel 魔法卡片_在Excel中制作情人节卡片

    excel 魔法卡片 Yes, it's Valentine's Day today, and if you were too busy to buy your sweetie a card yest ...

  2. jupyter notebook 常用魔法函数 Magic Function%time %timeit %who %pip %cd

    目录 魔法命令行(Magic command system) 查看变量 who/whos 两类 Magic commands 计时命令 time/timeit 补充:Wall Clock/Cpu ti ...

  3. python中常见的魔法方法 magic method

    魔法方法 magic method(类中定义的双下方法) 魔法方法都是父类object有的,在python3中所有的类默认都会继承object.当我们对这个对象使用这些函数或者运算符时就会调用类中的对 ...

  4. DTOJ4360. 魔法卡片(magic)

    题意: 有n张卡片,m个数字,每张卡面正面有其中的一些数字,反面有剩余的数字.有q次询问,每次询问一段区间,可以将这段区间里的任意一些卡片翻转,求翻转后所有正面出现过的数字的平方和的最大值. n×m≤ ...

  5. Jupyter notebook Ipython 魔法函数 Magic 计算代码(函数)耗时 Timing(%%time %time %timeit)

    1.%%time 将会给出cell的代码运行一次所花费的时间. 2.%time 将会给出当前行的代码运行一次所花费的时间. 3.%timeit 使用Python的timeit模块,它将会执行一个语句1 ...

  6. 19_03_26校内训练[魔法卡片]

    题意 有n张有序的卡片,每张卡片上恰有[1,m]中的每一个数,数字写在正面或反面.每次询问区间[l,r],你可以将卡片上下颠倒,问区间中数字在卡片上方的并的平方和最大是多少.q,n*m≤1,000,0 ...

  7. Python魔法方法(magic method)细解几个常用魔法方法(下)

    接上文,再介绍最后几个常用的魔法方法. 关于__dict__: 先上个例子: class Test(object):fly = Truedef __init__(self, age):self.age ...

  8. python的魔法方法(magic method)

    1,什么是魔法方法 对象中前后都有双下划线修饰的方法中大部分是有特殊意义的,在这样的名称中很大一部分是魔法(特殊)方法的名称,如__future__. 如果你的对象实现(重载)了这些方法中的某一个,那 ...

  9. 量子艺术、魔法成像、水生政治、性方程式……这些AI“衍生”科目都是啥?...

    郭一璞 发自 凹非寺  量子位 报道 | 公众号 QbitAI 现在,AI已经开始重新创造工作岗位了. 首批岗位出现在了学术界,职位包括:魔法成像研究员.水生政治学家.量子艺术教授-- 等等,这些学科 ...

最新文章

  1. 出现module ‘xgboost‘ has no attribute ‘DMatrix‘的临时解决方法
  2. vmoptions默认配置_AndroidStudio基本配置
  3. python网络爬虫爬取房价信息
  4. 设计模式-创建型-单件
  5. 今日代码(200714)--主客观求指标权重及求城市得分
  6. spotify音乐下载_使用Python和R对音乐进行聚类以在Spotify上创建播放列表。
  7. 现成的CA证书签发工具
  8. Kafka权威指南-学习笔记---第四章
  9. 服务器系统安装蓝牙驱动,Atheros Bluetooth蓝牙设备驱动
  10. 机器学习中的多分类任务详解
  11. PMI推出新认证:PgMP 项目集管理
  12. 写给四年前刚开始编程的自己
  13. Java 同步监视器中的 wait() 和 notify() 方法的具体实现
  14. 用wireshark捕捉查看登录时账号密码的传输方式
  15. .\Obj\Template.axf: error: L6002U: Could not open file .\obj\core_cm3.o: No such file or directory
  16. 数字电位器程控可调电阻IC
  17. 夜光带你走进python开发 (二十九)传奇语言
  18. [CodeFestival 2017J]MST
  19. systemd启动流程分析
  20. 邮政快递单号可以批量查询吗

热门文章

  1. 支付宝上线“相互保”,相互保险领域迎来升温
  2. 【IoT毕设.下】STM32+机智云AIoT+实验室安全监控系统
  3. Linux系统配置(Linux基础)
  4. chartjs 动态数据_使用ChartJS构建动态仪表板
  5. 水果店行业分析,水果店行业前景分析
  6. 蓝桥杯历届-奇妙的数字
  7. vue做混合式app_Vue Cordova教程-Vue+Cordova打造跨平台可安装的混合APP视频教程(大地)...
  8. Olympus AU5800 检验LIS系统的双工通讯
  9. DAEMONTools镜像工具的下载和使用
  10. android多行注释快捷键,AndroidStudio 常用快捷键