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…

AJAX Control Toolkit 控件学习(转自csdn山巅)

AJAX Control Toolkit 控件学习 2006-1-16 ToggleButton 关联ASP.NET CheckBox控件 RoundedCorder 造就圆角框 PasswordStrength TextBox中输入数据长度&#xff0c;以及限制&#xff1b;非常智能&#xff0c;有提示图 DropShadow 造就了照片的背影效果。 ScrollManag…

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

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

Java消息服务~开发者分配的消息头

生产者传送该消息之前在Message 对象上设置 JMSReplyTo 有些情况下&#xff0c;一个JMS消息生产者可能会要求消费者对一条消息做出应答。JMSReplyTo 消息头包含了一个javax.jms.Destination&#xff0c;标明了JMS 消费者应该应答的地址。请注意&#xff1a;如果某条消息头属性…

基金小窍门:如何判断基金的赚与赔

基金申购的时候&#xff0c;除了货币型基金&#xff0c;都有申购费,一般为申购金额的1.5%。 赎回的时候有赎回的手续费&#xff0c;一般为赎回金额的0.5%; 你只要记住两个单位净值就可以了&#xff1a;申购当日的基金单位净值&#xff08;记做x&#xff09;&#xff0c…

python Lambda 表达式

来源:http://www.cnblogs.com/jydeng/p/4145188.html 一、lambda函数 1、lambda函数基础&#xff1a; lambda函数也叫匿名函数&#xff0c;即&#xff0c;函数没有具体的名称,而用def创建的方法是有名称的。如下&#xff1a; """命名的foo函数"""…

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

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

Java消息服务~JMSReplyTo示例

在下面的例子中&#xff0c;首先创建两个Queue&#xff0c;发送者给一个Queue发送&#xff0c;接收者接收到消息之后给另一个Queue回复一个Message&#xff0c;然后再创建一个消费者来接受所回复的消息 import javax.jms.Connection; import javax.jms.JMSException; impo…

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;以及基于天然气的清洁能源技术等。以下为完…

Java消息服务~消息属性

应用程序特定的属性 应用程序属性在消息传送之前进行设置。一旦一条消息发布或发送后&#xff0c;它就变成了只读&#xff08;read-only&#xff09;属性&#xff1b;消费或生产者都无法修改它的属性。不过可以调用clearProperties()后&#xff0c;修改属性。 TextMessage mes…

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() { //该费用类型是否有子类型} …

买家和卖家也可以这样对话

买家&#xff1a;请问欧版和行货为什么要分开卖&#xff1f; 卖家&#xff1a;因为粘在一起不方便使用 买家&#xff1a;。。。。。。。。 买家&#xff1a;老板&#xff0c;你说欧版质量好&#xff0c;还是行货质量好&#xff1f; 卖家&#xff1a;也许是欧版的吧&#xff01;…

Java Web开发技术详解~Web的概念

Web 是一种分布式应用架构&#xff0c;旨在共享分布在网络上的各个Web服务器中的所有互相链接的信息。 Web 采用客户/服务器通信模式&#xff0c;客户与服务器之间用HTTP协议通信。 Web 使用超级文本技术&#xff08;HTML&#xff09;来链接网络上的信息。信息存放在服务器端&a…

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;华人学者…

1030 Travel Plan(甲级)

1030 Travel Plan (30分) A traveler’s map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to decide the shortest path between his/her starting city an…