E - Putting Candies
AtCoder Beginner Contest 241(Sponsored by Panasonic)
#include<iostream>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10;
LL n, k;
LL a[N], id[N], s[N], st, ed;
//同余性质
//若 a mod n == b mod n
//则 a+x mod n == b+x mod n
//x%n的结果一定在0~n-1之间
//若k>n一定会出现重复余数
//当第一次出现重复的下标(对应相同增量)时 循环开始
//id数组记录x%n得出的下标第一次出现的位置
//s维护迭代过程中的前缀和
//当x%n得出的下标第二次出现时 迭代路径形成一个环 且此后始终在环中
int main()
{LL n, k;cin >> n >> k;for (int i = 0;i < n;i++)scanf("%lld", &a[i]);for (int i = 0;i < n;i++)id[i] = -1;//期初所有点都没有出现过id[0] = 0;//x初始值是0 0出现过for (int i = 0;i < n;i++){s[i + 1] = s[i] + a[s[i] % n];if (id[s[i + 1] % n] != -1)//若如今得到的新下标出现过{st = id[s[i + 1] % n];//循环的开始是上一次出现ed = i + 1;//循环的结束是现在break;}id[s[i + 1] % n] = i + 1;//记录当前下标第一次出现的位置}LL ans = 0;if (k <= st){ans = s[k];}else{LL len = ed - st;//环的长度是终止位置减去起始位置LL val = s[ed] - s[st];//循环一次的总增量//计算与环的起点相比多走了多少步LL times = (k - st) / len;//走了几遍环LL left = (k - st) % len;//剩下的ans = times * val + s[st + left];}cout << ans;return 0;
}
E - Putting Candies相关推荐
- K - Candies POJ - 3159(利用了自定义比较操作符)
K - Candies POJ - 3159 题意: 孩子 A 觉得 B 得到的糖果不能比自己多超过 c,求 n 比 1 最多能多几颗糖果 思路:DJ,松弛条件: sweet[A] > swee ...
- CF1030F Putting Boxes Together
CF1030F - Putting Boxes Together 题意:给定数轴上的n个物体,你要把第l个物体到第r个物体之间的所有物体挪到挨在一起,使得总消耗最小.带修.消耗是重量乘距离. 解:就是 ...
- AtCoder Beginner Contest 215 G - Colorful Candies 2
AtCoder Beginner Contest 215 G - Colorful Candies 2 有n个糖果,每个糖果有着一个颜色a[i],每次拿k个糖果期望拿到E(x)个不同颜色的糖果,求出k ...
- 575. Distribute Candies 平均分糖果,但要求种类最多
[抄题]: Given an integer array with even length, where different numbers in this array represent diffe ...
- 1431. Kids With the Greatest Number of Candies
Title 给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目. 对每一个孩子,检查是否存在一种方案,将额外的 extr ...
- HDU - 6126 Give out candies
Give out candies 题解: 第一次遇见这样处理的网络流模型. 将问题转换成最小割问题. 具体的题解参考自:传送门 先将每个人的拆成m个人. 然后s向第1人连边流量为inf.第i个人向第i ...
- CF思维联系– CodeForces - 991C Candies(二分)
ACM思维题训练集合 After passing a test, Vasya got himself a box of n candies. He decided to eat an equal am ...
- poj 2886 Who Gets the Most Candies?(线段树)
题目链接:poj 2886 Who Gets the Most Candies? 题目大意:N个人围成一圈玩约瑟夫环游戏,不同的是.步长不固定,由前一个出局的人决定.给定K表示起始的人. 第i个淘汰的 ...
- POJ 3159 Candies(差分约束+SPAF)
题意: 给n个小朋友分发糖果,但小朋友们之间有嫉妒心.接下来m行,每行三个数,分别表示小朋友A希望B得到的糖果不能比他多x个.要求你计算在满足所有小朋友的条件的情况下最多需要准备多少颗糖. 题目: D ...
最新文章
- python实现可以被with上下文管理的类或函数
- webclient 请求期间发生异常_ARM异常中断的原因及处理措施
- 转载--html显示当前时间
- 为什么要Zipkin
- Configuration、SessionFactory、Session
- mysql与jframe_java-如何在JFrame上显示从mysql检索到的图像
- JavaScript中的arguments对象
- 【AI视野·今日NLP 自然语言处理论文速览 第十一期】Mon, 21 Jun 2021
- MySQL性能优化的参数简介
- Java项目课程02:系统概述
- 二进制数表示形式:原码、反码与补码
- java语言用数组接收字符_Java基础——数组应用之字符串String类
- 利用 VScode 对比两个文件差异
- catia保存成stp文件时部件丢失_在线教学文件同步神器——坚果云
- 构建高性能数据库缓存之redis主从复制
- Open***学习笔记——*** Server网络配置
- 基于CentOS7.2安装Kubernetes-v1.2
- 微信号、微信公众号、微信开放平台、微信商户、微信支付、移动应用申请流程
- Typora完整教程
- 新浪微博模拟登陆passwd参数rsa解密