bupt summer training for 16 #3 ——构造

https://vjudge.net/contest/172464

后来补题发现这场做的可真他妈傻逼

 

A.签到傻逼题,自己分情况

 1 #include <cstdio>
 2 #include <vector>
 3 #include <algorithm>
 4 
 5 using std::vector;
 6 using std::sort;
 7 
 8 typedef long long ll;
 9 
10 int n, m;
11 
12 ll a[2100], b[2100];
13 
14 ll sa, sb, dis, tmp, qaq;
15 
16 int t1 = -1, t2 = -1;
17 
18 int a1, a2, a3, a4;
19 
20 struct node {
21     ll x, y, z;
22     bool operator < (const node &a) const {
23         return x < a.x;
24     }
25 };
26 
27 vector <node> e;
28 
29 ll abs(ll x) {
30     return x < 0 ? -x : x;
31 }
32 
33 node find1(ll x) {
34     node ret = {0, -1, -1};
35     int l = 0, r = e.size() - 1, mid;
36     while(l <= r) {
37         int mid = (l + r) >> 1;
38         if(e[mid].x * 2 <= x) ret = e[mid], l = mid + 1;
39         else r = mid - 1;
40     }
41     return ret;
42 }
43 
44 node find2(ll x) {
45     node ret = {0, -1, -1};
46     int l = 0, r = e.size() - 1, mid;
47     while(l <= r) {
48         int mid = (l + r) >> 1;
49         if(e[mid].x * 2 > x) ret = e[mid], r = mid - 1;
50         else l = mid + 1;
51     }
52     return ret;
53 }
54 
55 int main() {
56     scanf("%d", &n);
57     for(int i = 1;i <= n;i ++)
58         scanf("%lld", &a[i]), sa += a[i];
59     scanf("%d", &m);
60     for(int i = 1;i <= m;i ++)
61         scanf("%lld", &b[i]), sb += b[i];
62     if(abs(sa - sb) <= 1) {
63         printf("%lld\n0\n", abs(sa - sb));
64         return 0;
65     }
66     qaq = tmp = dis = sa - sb;
67     for(int i = 1;i <= n;i ++) 
68         for(int j = 1;j <= m;j ++)
69             if(abs(qaq - (a[i] - b[j]) * 2) < abs(dis))
70                 dis = qaq - (a[i] - b[j]) * 2, t1 = i, t2 = j;
71     for(int i = 1;i <= n;i ++)
72         for(int j = i + 1;j <= n;j ++)
73             e.push_back((node){a[i] + a[j], i, j});
74     sort(e.begin(), e.end());
75     for(int i = 1;i <= m;i ++)
76         for(int j = i + 1;j <= m;j ++) {
77             ll k = b[i] + b[j];
78             node tt = find1(qaq + k * 2);
79             if(tt.y != -1 && abs(qaq + k * 2 - tt.x * 2) < abs(tmp)) tmp = qaq + k * 2 - tt.x * 2, a1 = tt.y, a2 = i, a3 = tt.z, a4 = j;
80             tt = find2(qaq + k * 2);
81             if(tt.y != -1 && abs(qaq + k *  2 - tt.x * 2) < abs(tmp)) tmp = qaq + k * 2 - tt.x * 2, a1 = tt.y, a2 = i, a3 = tt.z, a4 = j;
82         }
83     if(abs(qaq) <= abs(dis) && abs(qaq) <= abs(tmp)) printf("%lld\n0\n", abs(qaq));
84     else if(abs(dis) <= abs(tmp)) printf("%lld\n1\n%d %d", abs(dis), t1, t2);
85     else printf("%lld\n2\n%d %d\n%d %d", abs(tmp), a1, a2, a3, a4);
86     return 0;
87  }
View Code

想写if-else结果写完if忘记else了

 

B.我是暴力的O(n^2logn)

首先如果只交换一个数,那O(n^2)都会算吧

那交换两个数呢,我把n个数两两结合并求和,再对他们排序

再枚举另一数组的数对,二分一下尝试更新答案

 1 #include <cstdio>
 2 #include <vector>
 3 #include <algorithm>
 4 
 5 using std::vector;
 6 using std::sort;
 7 
 8 typedef long long ll;
 9 
10 int n, m;
11 
12 ll a[2100], b[2100];
13 
14 ll sa, sb, dis, tmp, qaq;
15 
16 int t1 = -1, t2 = -1;
17 
18 int a1, a2, a3, a4;
19 
20 struct node {
21     ll x, y, z;
22     bool operator < (const node &a) const {
23         return x < a.x;
24     }
25 };
26 
27 vector <node> e;
28 
29 ll abs(ll x) {
30     return x < 0 ? -x : x;
31 }
32 
33 node find1(ll x) {
34     node ret = {0, -1, -1};
35     int l = 0, r = e.size() - 1, mid;
36     while(l <= r) {
37         int mid = (l + r) >> 1;
38         if(e[mid].x * 2 <= x) ret = e[mid], l = mid + 1;
39         else r = mid - 1;
40     }
41     return ret;
42 }
43 
44 node find2(ll x) {
45     node ret = {0, -1, -1};
46     int l = 0, r = e.size() - 1, mid;
47     while(l <= r) {
48         int mid = (l + r) >> 1;
49         if(e[mid].x * 2 > x) ret = e[mid], r = mid - 1;
50         else l = mid + 1;
51     }
52     return ret;
53 }
54 
55 int main() {
56     scanf("%d", &n);
57     for(int i = 1;i <= n;i ++)
58         scanf("%lld", &a[i]), sa += a[i];
59     scanf("%d", &m);
60     for(int i = 1;i <= m;i ++)
61         scanf("%lld", &b[i]), sb += b[i];
62     if(abs(sa - sb) <= 1) {
63         printf("%lld\n0\n", abs(sa - sb));
64         return 0;
65     }
66     qaq = tmp = dis = sa - sb;
67     for(int i = 1;i <= n;i ++) 
68         for(int j = 1;j <= m;j ++)
69             if(abs(qaq - (a[i] - b[j]) * 2) < abs(dis))
70                 dis = qaq - (a[i] - b[j]) * 2, t1 = i, t2 = j;
71     for(int i = 1;i <= n;i ++)
72         for(int j = i + 1;j <= n;j ++)
73             e.push_back((node){a[i] + a[j], i, j});
74     sort(e.begin(), e.end());
75     for(int i = 1;i <= m;i ++)
76         for(int j = i + 1;j <= m;j ++) {
77             ll k = b[i] + b[j];
78             node tt = find1(qaq + k * 2);
79             if(tt.y != -1 && abs(qaq + k * 2 - tt.x * 2) < abs(tmp)) tmp = qaq + k * 2 - tt.x * 2, a1 = tt.y, a2 = i, a3 = tt.z, a4 = j;
80             tt = find2(qaq + k * 2);
81             if(tt.y != -1 && abs(qaq + k *  2 - tt.x * 2) < abs(tmp)) tmp = qaq + k * 2 - tt.x * 2, a1 = tt.y, a2 = i, a3 = tt.z, a4 = j;
82         }
83     if(abs(qaq) <= abs(dis) && abs(qaq) <= abs(tmp)) printf("%lld\n0\n", abs(qaq));
84     else if(abs(dis) <= abs(tmp)) printf("%lld\n1\n%d %d", abs(dis), t1, t2);
85     else printf("%lld\n2\n%d %d\n%d %d", abs(tmp), a1, a2, a3, a4);
86     return 0;
87  }
View Code

补题的时候,就把比赛代码三个地方的 int 改成了long long就过了

 

C.别人补题写的DP一眼看不懂...反正数据范围也不大,我们来xjb乱搞吧

数据范围20,时间5s,没有直接爆搜的思路

答案在0-1之间,满足单调性...试试二分?那judge呢?暴力dfs枚举?

效率玄学?并没有关系!...就当试试咯...过了...比DP还快...

 1 #include <cmath>
 2 #include <cstdio>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 const double eps = 1e-14;
 8 
 9 int n, L[21], R[21];
10 
11 double a[21];
12 
13 bool dfs(int i, int x) {
14     if(i > n)
15         return 1;
16     int y = L[i] / x;
17     if(L[i] % x) y ++;
18     for(y *= x;y <= R[i];y += x)
19         if(dfs(i + 1, y))
20             return 1;
21     return 0;
22 }
23 
24 bool judge(double k) {
25     for(int i = 1;i <= n;i ++)
26         L[i] = ceil(a[i] - a[i] * k), R[i] = floor(a[i] + a[i] * k);
27     for(int i = L[1];i <= R[1];i ++)
28         if(dfs(2, i))
29             return 1;
30     return 0;
31 }
32 
33 int main() {
34     scanf("%d", &n);
35     for(int i = 1;i <= n;i ++)
36         scanf("%lf", &a[i]);
37     double l = 0, r = 1.0, mid, ans;
38     for(int t = 66;t --;) {
39         mid = (l + r) / 2;
40         if(judge(mid)) ans = mid, r = mid - eps;
41         else l = mid + eps;
42     }
43     printf("%.12f", ans);
44     return 0;
45 }
View Code

看了别人DP代码...看懂了...

f[i][j]代表把第 i 种货币变成 j 的最小答案

我们有一种无赖解是把所有货币都变0

所以对于第 i 种货币,从 0 枚举到 a[i] * 2 就可以啦

复杂度O(nklogk),  k = max(a[i]) = 20W

这么来说粗略计算我的做法复杂度就是O(nklogk * log(1/eps))...实际优太多

 

D.ans = C(n,3) - 不合法的三角形

对于非法三角形枚举最大边 z

再求 x + y <= z 的 (x,y) 有多少对即可

预处理,O(1)回答

 1 #include <cstdio>
 2 
 3 typedef long long ll;
 4 
 5 const int maxn = 1000010;
 6 
 7 ll a[maxn], b[maxn];
 8 
 9 ll c(ll x) {
10     return x * (x - 1) * (x - 2) / 6;
11 }
12 
13 int main() {
14     for(int i = 3;i <= 1000000;i ++) a[i] = (i + 1) / 2 - 1;
15     for(int i = 4, j = 0;i <= 1000000;i ++) {
16         if(!(i & 1)) j ++;
17         b[i] = b[i - 1] + j;
18     }    
19     for(int i = 3;i <= 1000000;i ++) a[i] += a[i - 1], b[i] += b[i - 1];
20     int n;
21     while(scanf("%d", &n), n >= 3) printf("%lld\n", c(n) - a[n] - b[n]);
22     return 0;
23 }
View Code

 

E.

转载于:https://www.cnblogs.com/ytytzzz/p/7253450.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python常用快捷键、写代码事半功倍_Pycharm常用快捷键总结及配置方法

工欲善其事必先利其器&#xff0c;Python开发利器Pycharm常用快捷键以及配置如下&#xff0c;相信有了这些快捷键&#xff0c;你的开发会事半功倍 一 常用快捷键 编辑类&#xff1a; Ctrl D 复制选定的区域或行 Ctrl Y 删除选定的行 Ctrl Alt L 代码格式化 Ctrl Alt O 优…

使用FFMPEG SDK解码流数据获得YUV数据及其大小

本文以H264视频流为例&#xff0c;讲解解码流数据的步骤。 为突出重点&#xff0c;本文只专注于讨论解码视频流数据&#xff0c;不涉及其它&#xff08;如开发环境的配置等&#xff09;。如果您需要这方面的信息&#xff0c;请和我联系。 准备变量 定义AVCodecContext。如果您…

关于Python3.7和Python3.6中元组类型数据内存存储问题

关于Python3.7和Python3.6中元组类型数据内存存储问题 小编最近发现了一个瑕疵 当定义一个元组类型的变量后,若在程序后面再定义一个元组变量,这两个元组的内容相同,那么在不同的版本中会出现不同的结果 在Python3.6版本中,解释器将在内存中开辟两个内存空间分别存储两个元组的…

shell 删除了hdfs 文件_从零开始学大数据(三) Shell操作HDFS文件系统-中

1、格式化[rootmaster sbin]# hdfs namenode -format2、命令hdfs dfsadmin查看(hdfs dfsadmin -report)[rootmaster ~]# hdfs dfsadmin -report安全模式#获取安全模式状态[rootmaster ~]# hdfs dfsadmin -safemode get#进入安全状态[rootmaster ~]# hdfs dfsadmin -safemode en…

计算机硬件

计算机硬件 一、为什么要学习计算机基础 程序员编程的本质就是让计算机去工作&#xff0c;而编程语言就是程序员与计算机沟通的介质。程序员要想让计算机工作&#xff0c;就要知道计算机能干什么、是怎么样的一个完成过程&#xff0c;这也是我们必须学习计算机基础的原因。 …

铁路售票系统_铁路资讯:复兴号动车、智能京张高铁…中国最高端铁路装备看这里...

今天上午&#xff0c;两年一度的中国国际现代化铁路技术装备展在京开展&#xff0c;会期3天&#xff0c;将集中展示路网建设、客货运输、经营管理、工程建造、技术装备、旅客服务等铁路行业各领域的先进产品及技术。展会现场智能京张&#xff1a;将首次实现时速350公里自动驾驶…

CentOS下安装MySQL报安装文件conflicts错误:

2019独角兽企业重金招聘Python工程师标准>>> 第一&#xff1a;报这个错误&#xff0c;说明已经安装或相关文件已经存在&#xff0c;把已经存在的文件卸载了就可以了&#xff1a; rpm -e --nodeps mysql-libs-5.1.* 转载于:https://my.oschina.net/u/3197158/blog/1…

inc指令是什么意思_西门子PLC一些指令

指令(英文全称意思)∶指令含义1、LD ( Load装载):动合触点2、LDN (Load Not不装载):动断触点3、A(And与动合):用于动合触点串联4、AN (And Not与动断):用于动断触点串联5、o(Or 或动合):用于动合触点并联6、ON(Or Not 或动断):用于动断触点并联7、(Out输出):用于线圈输出8、OLD…

touchesEnded不响应

为什么80%的码农都做不了架构师&#xff1f;>>> http://blog.csdn.net/assholeu/article/details/16363241 touchesEnded不响应主要存在以下几种情况 case 1 : userInteractionEnabled 部分控件如UIImageView&#xff0c;userInteractionEnabled默认为NO&#xff0…

iOS开发人员不容错过的10大工具

内容简介 1、iOS简介 2、iOS开发十大实用工具之开发环境 3、iOS开发十大实用工具之图标设计 4、iOS开发十大实用工具之原型设计 5、iOS开发十大实用工具之演示工具 6、iOS开发十大实用工具之视频制作 7、iOS开发十大实用工具之分析工具 iOS简介 说起iOS&#xff0c;自然不必多介…

算法学习系列(十):用数组模拟链表、双链表、栈、队列、单调栈、单调队列

目录 引言一、数组模拟链表1.模板2.例题3.测试 二、数组模拟双链表1.模板2.例题3.测试 三、数组模拟栈1.模板2.例题3.测试 四、数组模拟队列1.模板2.例题3.测试 五、数组模拟单调栈1.例题模板2.测试 六、数组模拟单调队列1.例题模板2.测试 引言 首先说一下为什么要拿数组来模拟…

为什么你的路由器穿墙能力差?看完秒懂

1、信号弱赖我咯? 不管你承认与否&#xff0c;只要有墙家中就会存有信号死角&#xff0c;不要小看一墙之隔。如何让路由器的信号增强? 网上一搜旁门左道真不少&#xff0c;什么调整天线寻找合理角度&#xff0c;又或是用易拉罐DIY一个信号放大器&#xff0c;然鹅并非简单的将…

fish工具_Python程序员使用哪些开发工具

Python程序员使用哪些开发工具?很多Python学习者想必都会有如下感悟&#xff1a;最开始学习Python的时候&#xff0c;因为没有去探索好用的工具&#xff0c;吃了很多苦头。后来工作中深刻体会到&#xff0c;合理使用开发的工具的便利和高效。今天&#xff0c;北京学佳澳小编总…

[shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证

本文地址&#xff1a;http://blog.csdn.net/sushengmiyan/article/details/39933993shiro官网: http://shiro.apache.org/shiro中文手冊&#xff1a;http://wenku.baidu.com/link?urlZnnwOHFP20LTyX5ILKpd_P94hICe9Ga154KLj_3cCDXpJWhw5Evxt7sfr0B5QSZYXOKqG_FtHeD-RwQvI5ozyT…

Web安全之Cookie劫持

1.Cookie是什么? 2.窃取的原理是什么? 3.系统如何防Cookie劫持呢? 看完这三个回答&#xff0c;你就明白哪位传奇大侠是如何成功的!!! Cookie: HTTP天然是无状态的协议&#xff0c;为了维持和跟踪用户的状态&#xff0c;引入了Cookie和Session。Cookie包含了浏览器客户端的用…

运动估计简介

运动估计( Motion Estimation) 维基百科链接&#xff1a;http://en.wikipedia.org/wiki/Motion_estimation运动估计的应用有很多&#xff0c;最初的应用的领域是视频的编码。运动估计算法一般分为: 像素递归法pel-recursive algorithm (PRA)和块匹配法 block-matching algorith…

andriod studio 运行 无结果_华为物联网操作系统LiteOS内核教程01——IoT-Studio介绍及安装...

1. 物联网一站式开发工具 —— IoT StudioIoT Studio 是支持 LiteOS 嵌入式系统软件开发的工具&#xff0c;提供了代码编辑、编译、烧录 及调试等一站式开发体验&#xff0c;支持 C、C、汇编等多种开发语言&#xff0c;让您快速&#xff0c;高效地进 行物联网开发。2. IoT Stud…

颜色转换

以蓝色为例&#xff0c;#0000FF应该被表示成rgb(0,0,255)。 我们将函数命名为getRGB() &#xff08;可以将字符串视为数组&#xff0c;这个数组的元素为字符&#xff09; function getRGB(color) {var rgb [parseInt(0xcolor.slice(1,3)),parseInt(0xcolor.slice(3,5)),parseI…

android 按键会触发ontouch吗?_Android实现炫酷的拖拽浮动按钮

IOS的Assistive Touch效果很炫酷&#xff0c;可以任意拖拽&#xff0c;同时点击后会展开菜单栏。然而&#xff0c;这不只是IOS的特权&#xff0c;Android也可以实现。但是由于悬浮窗需要申请权限&#xff0c;所以本文仅在app内实现&#xff0c;可以任意拖拽&#xff0c;并可以响…

强名称程序集(strong name assembly)——为程序集赋予强名称

引言&#xff1a;在曾经的项目开发中&#xff0c;在程序集中见到过一个后缀为*.snk的文件。当时看这个文件的图标。感觉可能是企业内部保护版权啥的一种方式。一&#xff0c;强程序集攻克了哪些问题&#xff1f;1&#xff0c;唯一标识一个程序集2&#xff0c;放置程序集被仿冒和…