洛谷 8 月月赛 & 「PMOI」Round · 04
T1 T166167 「PMOI-4」人赢
题目大意
给一个数列的前两项分别为\(n\)和\(m\)
当\(i\geq3\)时\(a_i = a_{i-1}*a_{i-2}\)的个位
给定\(n\),\(m\),\(k\), 求以\(n\)和\(m\)为前两项的数列的第\(k\)项
(数据范围 $0 \leq n,m \leq 9 $ \(1 \leq k \leq 1e12\)
思路
通过观察样例可以发发现 \(n,m\)很小 \(k\)很大 因此这道题肯定是有规律的
通过打表我们可以发现 这个数列从第三项开始 每 六项 重复一次
因此我们可以通过找到数列的前六项来找到第\(k\)个数字是多少
AC_CODE
#include <bits/stdc++.h>
#define x first
#define y second
//#define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII ;
typedef long long LL;
template < typename T >
inline void read(T &x)
{
x = 0; bool f = 0; char ch = getchar();
while(!isdigit(ch)){f ^= !(ch ^ 45);ch=getchar();}
while(isdigit(ch)) x= (x<<1)+(x<<3)+(ch&15),ch=getchar();
x = f ? -x : x;
}
const int N = 2e5 + 10;
int a[N];
void solve() {
int n, k;
read(n), read(k);
LL ans = 0;
for(int i = 1; i <= n; i ++ ) {
read(a[i]);
ans += a[i];
}
sort(a + 1, a + 1 + n);
int res = n - k;
if(res >= 2)
cout << a[(res + 1) / 2] << endl;
else {
if(res == 0) cout << 0 << endl;
else if(res == 1) cout << ans << endl;
}
}
signed main()
{
int T = 1; scanf("%d",&T);
while(T -- ) {
solve();
}
return 0;
}
T2 「PMOI-4」生成树
题意
给定一个数组
a[]我们每次取出这个数列中的一个数字放入新数组中
当这个数字在新数组中的下标为i这个数字原本为k时 其他的数字
加上\(-1^{i+k+1}k\) 求新数组中所有的数字最大的和
思路
我们需要求所有的数字最大的和,基于贪心的思想,我们要让每个数字尽可能的大
当某个数字先选的时候 他会对后面的造成影响,因此我们要让这个影响尽可能的大
可以使后面的数字尽可能的大
由此add受到下标i和k的 奇偶性问题 我们做出以下分析
- 当我们填到第奇数个数字时 我们需要让它对后面的影响为正
-i+k+1是奇数 且k是负数
-i+k+1是偶数 且k是正数
- \(|k|\) 尽可能的大(对后面的影响更大
- 如果上述两种情况不存在,我们优先去放0(0对后面无影响
- 如果以上都不存在,我们只能放对后面造成负影响的数字,因此我们让它绝对值尽可能小 - 偶数同上
AC_CODE
#include <bits/stdc++.h>
#define x first
#define y second
#define pb push_back
#define mk make_pair
#define debug(x) cout<<#x" ----> "<<x<<endl
#define rep(i, b, s) for(int i = (b); i <= (s); ++i)
#define pre(i, b, s) for(int i = (b); i >= (s); --i)
//#define int long long
#define endl '\n'
#define ios ios::sync_with_stdio(false); cin.tie(0), cout.tie(0)
#define all(v) (v).begin(),(v).end()
using namespace std;
typedef unsigned long long ULL;
typedef pair<int, int> PII ;
typedef pair<double, double> PDD ;
typedef long long LL;
const int N = 1e5 + 10;
int n;
PII a[N];
int b[N];
bool cmp(PII p, PII q) {
return abs(p.x) < abs(q.x);
}
void solve() {
scanf("%d", &n);
vector<PII> l, r;
int cnt = 0;
for(int i = 0; i < n; i ++ ) {
int x;
scanf("%d", &x);
b[i] = x;
if(!x) cnt ++;
else if(x < 0 && x & 1 || x > 0 && !(x & 1)) l.pb({x, i});
else r.pb({x, i});
}
sort(all(l), cmp);
sort(all(r), cmp);
int len1 = l.size(), len2 = r.size();
int t1 = len1 - 1, t2 = len2 - 1, e1 = 0, e2 = 0;
for(int i = 0; i < n; i ++ ) {
if((i + 1) & 1) {
if(t1 >= e1) {
a[i] = l[t1 --];
}
else if(cnt) {
a[i] = {0, 0};
cnt --;
}
else a[i] = r[e2 ++];
}
else {
if(t2 >= e2) a[i] = r[t2 -- ];
else if(cnt) {
a[i] = {0, 0};
cnt --;
}
else a[i] = l[e1 ++];
}
}
// for(int i = 0; i < n; i ++ )
// printf("%d %d\n", a[i].x, a[i].y);
LL res = 0, ans = 0;
int t = 1;
for(int i = 0; i < n; i ++, t ^= 1 ) {
if(a[i].x == 0) {
ans += res;
continue;
}
ans += (res + a[i].x);
int p = b[a[i].y];
if((t + 1 + p) % 2 == 0) res += p;
else res -= p;
}
printf("%lld", ans);
}
signed main()
{
int T = 1; //scanf("%d",&T);
while(T -- ) {
solve();
}
return 0;
}
洛谷 8 月月赛 & 「PMOI」Round · 04的更多相关文章
- 「LGR-049」洛谷7月月赛 D.Beautiful Pair
「LGR-049」洛谷7月月赛 D.Beautiful Pair 题目大意 : 给出长度为 \(n\) 的序列,求满足 \(i \leq j\) 且 $a_i \times a_j \leq \max ...
- 「P4994」「洛谷11月月赛」 终于结束的起点(枚举
题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...
- 「P4996」「洛谷11月月赛」 咕咕咕(数论
题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...
- 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心
题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi,地面的高度是 h_0 = 0 ...
- 洛谷4月月赛R2
洛谷4月月赛R2 打酱油... A.koishi的数学题 线性筛约数和就可以\(O(N)\)了... #include <iostream> #include <cstdio> ...
- 洛谷3月月赛 R1 Step! ZERO to ONE
洛谷3月月赛 R1 Step! ZERO to ONE 普及组难度 290.25/310滚粗 t1 10分的日语翻译题....太难了不会... t2 真·普及组.略 注意长为1的情况 #include ...
- 【洛谷5月月赛】玩游戏(NTT,生成函数)
[洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了 ...
- 【LGR-054】洛谷10月月赛II
[LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...
- 【LGR-051】洛谷9月月赛
[LGR-051]洛谷9月月赛 luogu 签到题 description 给出\(K\)和质数\(m\),求最小的\(N\)使得\(111....1\)(\(N\)个\(1\))\(\equiv k ...
随机推荐
- 【剑指Offer】数组中出现次数超过一半的数字 解题报告(Python)
[剑指Offer]数组中出现次数超过一半的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-inter ...
- 【JAVA今法修真】 第七章 洞天风云起,索引混乱平
您好,我是南橘,万法仙门的掌门,刚刚从九州世界穿越到地球,因为时空乱流的影响导致我的法力全失,现在不得不通过这个平台向广大修真天才们借去力量.你们的每一个点赞,每一个关注都是让我回到九州世界的助力,兄 ...
- Java初学者作业——分别计算两个整数加、减、乘、除的结果并显示,要求除法保留两位小数。
返回本章节 返回作业目录 需求说明: 分别计算两个整数加.减.乘.除的结果并显示,要求除法保留两位小数. 实现思路: 接收用户控制台输入的两个整数. 实现两个整数的加.减.乘.除的运算并输出结果. 除 ...
- LDAP客户端安装
安装环境: 10.43.159.7 客户端 使用ldap客户端验证登陆: 用户为10.43.159.9服务端上面创建的ldap:zdh1234 1.安装LDAP client认证需要的pam包 yum ...
- Ubuntu安装Jenkins是报错:The following signatures couldn't be verified because the public key is not available: NO_PUBKEY XXXXXXXXXXX
我使用Ubuntu16.04安装Jenkins时,按照官网的要求,步骤如下(https://pkg.jenkins.io/debian-stable/): # 添加Key sudo wget -q - ...
- Google面试评分卡
Google对工程面试之前,会让面试人员填一张评分卡,以加强面试官对你的理解,大致内容如下: 0 - 对于相关技术领域还不熟悉. 1 - 可以读懂这个领域的基础知识. 2 - 可以实现一些小的改动,清 ...
- DB2给表批量赋权
使用DB2的for循环语句给表批量赋权,同理,稍加修改可作为其他批量操作. 值得注意的是: grant语句无法直接执行,需要使用execute immediate才能执行. 授权操作表的所有权限:gr ...
- 初识python 之 爬虫:使用正则表达式爬取“糗事百科 - 文字版”网页数据
初识python 之 爬虫:使用正则表达式爬取"古诗文"网页数据 的兄弟篇. 详细代码如下: #!/user/bin env python # author:Simple-Sir ...
- mysql数据库读写分离教程
注意:实现MySQL读写分离的前提是我们已经将MySQL主从复制配置完毕 一.Mycat实现读写分离安装和配置 架构规划: 192.168.201.150 master 主节点 192.168. ...
- Echart可视化学习(六)
文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 柱状图定制 官网找到类似实例, 适 ...