Codeforces Round 917 (Div. 2)(A~D)(又是数学题)

A - Least Product 

        题意:

思路:若有奇数个负数,则不需要任何操作。若存在0,也不需要任何操作。其余情况将任意一个数改为0即可。

        

#include <bits/stdc++.h>
using namespace std;
void solve() 
{int n;cin >> n;int a[n + 5];for(int i = 0 ; i < n ; i ++)cin >>a[i];int cnt = 0;for(int i = 0 ; i < n ; i ++){if(a[i] < 0){cnt++;}if(a[i] == 0){cout << 0 <<endl;return;}}if(cnt % 2 == 0){cout << 1 << endl;cout << 1 << " " << 0 << endl;}else{cout << 0 <<endl;}
}            
int main() 
{int t = 1;cin>>t;while(t--){solve();}return 0;
}

B - Erase First or Second Letter 

        题意:

        思路:由于只能删除前两个数,因此可以考虑固定字符串开头,然后每次删除第二个数就会多形成一个空字符串。然后遍历每一个字符,这样做是O(N^{2})的。可以发现:对于同一个开头字母而言,前面位置删除后所能形成的字符串必然涵盖了后面位置开头所形成的字符串,因此不需要遍历所有字符,只需要遍历所有字母即可。这样复杂度是 O(26 * N)的。

#include <bits/stdc++.h>
using namespace std;
void solve() 
{int n;string s;cin >> n;int inf = n + 1;cin >> s;vector<int>P(26 , inf);for(int i = 1 ; i <= n ; i ++){P[s[i - 1] - 'a'] = min(P[s[i - 1] - 'a'] , i);}	int ans = 0;for(int i = 0 ; i < 26 ; i ++){ans += inf - P[i];}cout << ans <<endl;
}            
int main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int t=1;cin>>t;while(t--){solve();}return 0;
}

C - Watering an Array 

        题意:

               思路:假设一开始数组全为0,要让a_{j} = j的最少操作需要j次,且有\forall i(a_{i} = j > i)(i < j)\forall i(a_{i} <= j < i)(i > j),因此整个数组的价值最多为1。由此可以发现,对于全是0的数组而言,只需要前一天选择操作1,让a_{1} = 1 , 第二天选择操作2。这样就能得1分,且这么做一定是最优的。由于一开始不一定全是0,所以在第一次使用操作2了之后,每两天能够得一分。接下来只需要枚举什么时候第一次用操作2就行了。

        假设第 i 天第一次使用操作2,那么总共的得分为 初始数组得分 + (d - i) /2。而什么情况下会使得总得分更高,即连续使用操作1之后,初始数组得分变的更高了。由于初始数组得分最高为n,所以只需要遍历前2 * n天使用操作1即可。复杂度为O(2 * N^{2})

        

#include <bits/stdc++.h>
using namespace std;
const int inf = 100;
void solve() 
{int n , k , d;cin >> n >> k >> d;int arr[n + 5] , brr[k + 5];for(int i = 1 ; i <= n ; i ++){cin >> arr[i];}for(int i = 0 ; i < k ; i ++){cin >> brr[i];}int ans = -inf;int dd = 0;for(int i = 0 ; i < min(d , 2 * n) ; i ++){int num = 0;for(int j = 1 ; j <= n ; j ++){num += (arr[j] == j);}ans = max(ans , num + (d - 1 - i) / 2);for(int j = 1 ; j <= brr[dd] ; j ++){arr[j]++;}dd++;dd %= k;}cout << ans << endl;
}            
int main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int t=1;cin>>t;while(t--){solve();}return 0;
}

D - Yet Another Inversions Problem

思路: 对于一个数内部,即a_{ik}a_{ik + k - 1}之间的逆序对而言,只需要对q数组求一次逆序对即可。

  接下来考虑数与数之间的情况。对于a_{i}而言,大小在(a_{i} , 2 * a_{i})之间的数而言,a_{i}*2^{p_{j}}与这些数能够形成的逆序对为(a_{i}*2^{p_{j}} , a_{x} * 2^{p_{j} - 1})(a_{i}*2^{p_{j}} , a_{x} * 2^{p_{j} - 2})....(a_{i}*2^{p_{j}} , a_{x} * 2^{0})总共有p_{j}个。因此a_{i}与这些数所能形成的逆序对数量为\sum_{i = 0}^{k} p_{i} = (0 + k - 1) * k / 2。而对于大小在(2 * a_{i} , 4 * a_{i})的数而言,a_{i}*2^{p_{j}}与这些数能够形成的逆序对为(a_{i}*2^{p_{j}} , a_{x} * 2^{p_{j} - 2})(a_{i}*2^{p_{j}} , a_{x} * 2^{p_{j} - 3})....(a_{i}*2^{p_{j}} , a_{x} * 2^{0})总共有p_{j} - 1。因此因此a_{i}与这些数所能形成的逆序对数量为\sum_{i = 0}^{k} p_{i} = (0 + k - 2) * (k - 1) / 2,如此不断往上倍增求答案,直到上限为止。

        而相反,大小在((a_{i}+ 1)/ 2, a_{i})之间的数而言,也是同样的考虑方式,如此不断除以二直到下限为止。详细可以看注释

        

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define int long long
const LL mod = 998244353;
const int N = 5e5;
struct BIT{//Binary indexed Tree(树状数组)int n;vector<int> tr;BIT(int n) : n(n) , tr(n + 1 , 0){}int lowbit(int x){return x & -x;}void modify(int x , int modify_number){for(int i = x ; i <= n ; i += lowbit(i)){tr[i] += modify_number;}}void modify(int l , int r , int modify_number){modify(l , modify_number);modify(r + 1 , -modify_number);}int query(int x){int res = 0;for(int i = x ; i ;  i -= lowbit(i))res += tr[i];return res;}int query(int x , int y){return query(y) - query(x);}
};
int tmp[N];
LL merge_sort(int q[], int l, int r)
{if (l >= r) return 0;int mid = (l + r) >> 1; // 二分区间LL res = merge_sort(q, l, mid) + merge_sort(q, mid + 1, r);//归并int i = l, j = mid + 1, k = 0;while (i <= mid && j <= r){if (q[i] <= q[j]) tmp[k ++] = q[i ++]; // 前面的排序正常,注意`=` 说明不是逆序对else{res += mid - i + 1;tmp[k ++] = q[j ++];}}// 扫尾工作while (i <= mid) tmp[k ++] = q[i ++];while (j <= r) tmp[k ++] = q[j ++];for (int i = l, j = 0; i <= r; i ++ , j ++) q[i] = tmp[j];return res;
}
void solve() 
{int n , k;cin >> n >> k;BIT num(4 * n + 5) , sum(k + 5);int a[n] , b[k];for(int i = 0 ; i < n ; i ++){cin >> a[i];num.modify(a[i] , 1);}for(int i = 0 ; i < k ; i ++){cin >> b[i];}int ans = merge_sort(b , 0 , k - 1);//自己内部的贡献ans *= n;//ans %= mod;for(int i = 0 ; i < n ; i ++){int x = a[i];//x 与 后面所形成的的逆序对int cnt = 1;while(x < 2 * n ){int t = x * 2;int nn = num.query(x , t);//a[i] * 2 ^ cnt > 这些数if(nn == 0){x = t;cnt++;continue;}int end = max(1LL * 0 , k - cnt);int ns = (1 + end) * end / 2;//	cout << x << " " << t << " " << nn << endl;//		cout << "cnt :" << cnt <<"ns :" << ns << endl;ans += ns * nn;ans %= mod;x = t;cnt++;}x = a[i];cnt = 1;while(1){if(x == 1)break;int t = (x + 1) / 2;int nn = num.query(t - 1  , x - 1);//这些数 * 2 ^ cnt > a[i]
/*			cout << t - 1 << " " << x - 1 << " " << nn << endl;*/if(nn == 0){x = t;cnt++;continue;}int st = min(k , cnt );//int cntt = k - st + 1;int res = k - cntt;int ns =  k * res + (st + k) * cntt / 2;
/*			cout << "cnt :" << cnt <<"ns :" << ns << endl;*/ans += nn * ns;ans %= mod;;x = t;cnt++;}num.modify(a[i] , -1);}cout << ans << endl;
}            
signed main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int t=1;cin>>t;while(t--){solve();}return 0;
}

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

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

相关文章

权威发布:新一代人工智能发展白皮书(2017)

来源&#xff1a;机器人大讲堂指导单位、专家顾问及编写人员顾 问潘云鹤 中国工程院院士指导单位工业和信息化部信息化和软件服务业司指导委员会谢少锋 工信部信软司司长李冠宇 工信部信软司副司长徐晓兰 中国电子学会副理事长兼秘书长张宏图 中国电子学会总部…

Python 的 Gevent --- 高性能的 Python 并发框架

From&#xff1a;http://www.xuebuyuan.com/1604603.html Gevent 指南(英文)&#xff1a;http://sdiehl.github.io/gevent-tutorial Gevent 指南(中文)&#xff1a;http://xlambda.com/gevent-tutorial Gevent 指南(中文)下载地址&#xff1a;http://download.csdn.net/downloa…

高通首次推出AI引擎 打包所有软硬件算力

来源&#xff1a;智东西作者&#xff1a;明天2月22日消息&#xff0c;高通宣布推出人工智能引擎&#xff08;AI Engine&#xff09;&#xff0c;让人工智能在终端侧&#xff08;如智能手机&#xff09;上的应用更快速、高效。该AI Engine包括软硬件两部分&#xff0c;在高通骁龙…

一文详解「群体机器人」中的「实体进化」到底是什么?

原文来源&#xff1a;frontiers作者&#xff1a;Nicolas Bredeche、Evert Haasdijk、Abraham Prieto「雷克世界」编译&#xff1a;嗯~阿童木呀、KABUDA本文概述了适用于机器人群体&#xff08;robot collectives&#xff09;在线分布式进化的进化机器人技术&#xff0c;即实体进…

prototype.js1.5平面结果导读图

转载于:https://www.cnblogs.com/zjypp/archive/2007/10/16/2319458.html

NumPy的详细教程

来源&#xff1a;http://blog.csdn.net/lsjseu/article/details/20359201 用 Python 做科学计算(PDF源码)&#xff1a;https://download.csdn.net/download/freeking101/10959832用 Python 做科学计算&#xff1a;基础篇、手册篇、实战篇&#xff1a;http://old.sebug.net/pap…

美媒评2018年全球十大突破性技术:AI和人工胚胎上榜

来源&#xff1a;新浪科技作者&#xff1a;邱越 斯眉美国《麻省理工科技评论》本周刊文&#xff0c;列出了2018年的10大科技突破。今年入选的技术包括人工智能技术“生成对抗网络”&#xff08;GAN&#xff09;、人工胚胎&#xff0c;以及基于天然气的清洁能源技术等。以下为完…

Sublime Text 全程图文指引

From&#xff08;Sublime Text 全程指南&#xff09;&#xff1a;http://zh.lucida.me/blog/sublime-text-complete-guide From&#xff08;Sublime Text 3 全程详细图文原创教程&#xff09;&#xff1a;http://www.qdfuns.com/notes/15088/7f1b1a378c5b85c179571e0860f2baad.…

设计模式分析

聚合&#xff0c;层次设计模式&#xff1a;适用于层次关系例子&#xff1a;publicclassFee { privatefloatvaluee 0; publicstringGetName() { //返回费用的名称} publicboolHasChildren() { //该费用类型是否有子类型} …

dos命令、find、findstr、ping、nbtstat、netstat、net、at、ftp、telnet、tasklist、taskkill、netsh

DOS 在线手册&#xff1a;http://www.shouce.ren/api/dos/ DOS 命令学习手册 ( DOS W3School 教程 )&#xff1a;https://www.w3cschool.cn/dosmlxxsc1/ cmd命令&#xff1a; &#xff1a;http://wenku.baidu.com/view/5ecce91452d380eb62946da8.html&#xff1a;http://wenku…

重磅!中国科学家最新医学AI成果荣登《细胞》杂志

作者&#xff1a;李雨晨概要&#xff1a;在今天出版的最新一期《细胞》上&#xff0c;华人学者张康教授的研究荣登杂志封面。他们带来的&#xff0c;是一款能精确诊断多种疾病的人工智能工具。医学人工智能领域又有大新闻。在今天出版的最新一期《细胞》上&#xff0c;华人学者…

2017全球教育机器人行业研究报告(附PDF下载)

来源&#xff1a; 起点财经 概要&#xff1a;伴随着全球化市场激烈竞争及高科技日新月异的发展&#xff0c;美、日、韩、欧、中等国家逐渐将智能机器人作为战略新兴产业发展不可缺少的创新技术支撑。伴随着全球化市场激烈竞争及高科技日新月异的发展&#xff0c;美、日、韩、…

从零开始——PowerShell应用入门(全例子入门讲解)

From&#xff1a;https://www.cnblogs.com/lavender000/p/6935589.html PowerShell 在线教程&#xff1a;https://www.pstips.net/powershell-online-tutorials 微软 PowerShell 官方文档&#xff1a;https://docs.microsoft.com/zh-cn/powershell/ 学习一门技术&#xff0c;…

时空大数据赋能智慧城市的思考和实践

来源&#xff1a; 超图集团时空大数据和新型智慧城市是当下地信产业的两大热词&#xff0c;这两者的奇妙关联将擦出怎样精彩的火花&#xff1f;时空大数据如何赋能城市智能与城市智慧&#xff0c;让智慧城市建设迈上新的高度&#xff1f;2月6日至7日&#xff0c;由中国地理信息…

linux 命令:nc、netcat、ncat、socat

参考 &#xff1a;http://www.linuxso.com/command/nc.html NC工具的使用说明教程&#xff1a;https://blog.csdn.net/xysoul/article/details/52270149 window 版本 nc 下载&#xff1a;https://eternallybored.org/misc/netcat/ 1、nc、ncat 简介 NC 全名 Netcat (网络刀)&…

关于GPS 车辆定位导航中的投影变换

GPS 采用 WGS-84 椭球地理坐标, 用经、纬度和大地系来表示3 维空间信息。因此,GPS 车辆定位导航监控中心接收到的只是经、纬度信息, 必须通过高斯投影将其转换成高斯坐标。转换公式如下:转载于:https://www.cnblogs.com/kaixin110/archive/2007/12/11/990851.html

Linux下查看系统版本号信息的方法

From&#xff1a;https://linux.cn/article-9586-1.html 如果你加入了一家新公司&#xff0c;要为开发团队安装所需的软件并重启服务&#xff0c;这个时候首先要弄清楚它们运行在什么发行版以及哪个版本的系统上&#xff0c;你才能正确完成后续的工作。作为系统管理员&#xff…

人工智能的恶意用途:预测、预防和缓解

来源&#xff1a; 新浪科技编译一份由26名专家联合撰写的报告&#xff0c;对人工智能技术的潜在威胁发出警告。他们认为&#xff0c;这项技术可能在未来5到10年催生新型网络犯罪、实体攻击和政治颠覆。这份100页的报告标题为《人工智能的恶意用途&#xff1a;预测、预防和缓解》…

CSS使用总结

在分配ID和类名时&#xff0c;尽可能保持与表现形式无关&#xff0c;例如contleft有可能以后希望出现在右边。 尽量少使用类,因为可以层叠识别,如: .News h3而不必在h3上加类<div class”News”> <h3></h3> <h2></h2> <p></p> <…

linq 关联查询

可得会在以后的实体类中能用到usingSystem;usingSystem.Collections;usingSystem.Configuration;usingSystem.Data;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.HtmlControls;usingSystem.Web.UI.WebControls;usingSyst…