链接:https://ac.nowcoder.com/acm/contest/634/B
来源:牛客网

题目描述
给出n条线段,第i条线段的长度为a_ia
i

,每次可以从第i条线段的j位置跳到第i + 1条线段的j+1位置。如果第i+1条线段长度不到j+1,那么就会回到第i条线段的0位置,然后继续跳。
问从第i条线段的0位置跳到第n条线段需要跳多少次
为了减少输入量,a数组将由以下方式得到
unsigned int SA, SB, SC;
int mod;
unsigned int Rand(){
SA ^= SA << 16;
SA ^= SA >> 5;
SA ^= SA << 1;
unsigned int t = SA;
SA = SB;
SB = SC;
SC ^= t ^ SA;
return SC;
}
int main() {
cin>>n>>mod>>SA>>SB>>SC;
for(int i = 1;i <= n;++i) a[i] = Rand() % mod + 1;
}
输入描述:
第一行两个正整数n,mod,表示一共有n条线段

第二行3个数字,分别为SA,SB,SC
输出描述:
一行一个数字,表示从每条线段跳到n的次数之和。
示例1
输入
复制
5 5
5 6 4
输出
复制
13

思路:

假设每一个a[i] 都无限长的话, 那么ans = n * ( n-1 ) / 2

然后我们思考多出的跳跃是从哪里来的呢?

是当如果第i+1条线段长度不到j+1,那么就会回到第i条线段的0位置,这里就会多跳一次。

那么我们可以知道,如果一个位置i,走到第j个线段会跳到0位置的话,那么i以上的所有线段都会因为i到j 之间线段长度的限制多跳跃一次, (可以画图理解一下。)

然后我们就可以 从后向前倒推,看那些i符合上面的情况,对答案做累加即可。

细节见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
ll powmod(ll a, ll b, ll MOD) {ll ans = 1; while (b) {if (b % 2) { ans = ans * a % MOD; } a = a * a % MOD; b /= 2;} return ans;}
inline void getInt(int *p);
const int maxn = 20000010;
const int inf = 0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
unsigned int SA, SB, SC;
int mod;
int n;
unsigned int a[maxn];
unsigned int Rand()
{SA ^= SA << 16;SA ^= SA >> 5;SA ^= SA << 1;unsigned int t = SA;SA = SB;SB = SC;SC ^= t ^ SA;return SC;
}
int main()
{//freopen("D:\\code\\text\\input.txt","r",stdin);//freopen("D:\\code\\text\\output.txt","w",stdout);cin >> n >> mod >> SA >> SB >> SC;for (int i = 1; i <= n; ++i) { a[i] = Rand() % mod + 1; }ll ans=(n*(n-1))/2;ll x=a[n];for(int i=n-1;i>=1;--i){x--;if(x>a[i]){x=a[i];// 取较小的作为限制条件}if(!x){ans+=(i-1);// 这个位置前面的每一个线段都会多跳一次。x=a[i];}}cout<<ans<<endl;return 0;
}inline void getInt(int *p)
{char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}} else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

转载于:https://www.cnblogs.com/qieqiemin/p/11348352.html

牛客练习赛44 B 小y的线段 (思维)相关推荐

  1. 牛客练习赛44 C 小y的质数 (数论,容斥定理)

    链接:https://ac.nowcoder.com/acm/contest/634/C 来源:牛客网 题目描述 给出一个区间[L,R],求出[L,R]中孪生质数有多少对. 由于这是一个区间筛质数的模 ...

  2. 牛客练习赛44 A 小y的序列 (模拟,细节)

    链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  3. 牛客练习赛96 C小y的序列

    链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 给出长度为nnn的序列a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​及一个数kkk,定义一段 ...

  4. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  5. 牛客练习赛40 A.小D的剧场

    链接:https://ac.nowcoder.com/acm/contest/369/A?&headNav=acm 来源:牛客网 题目描述 "我明白." 作为这命运剧场永远 ...

  6. 牛客练习赛81 B. 小 Q 与彼岸花(FWT nlogn做法)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://ac.nowcoder.com/acm/contest/11171/B ...

  7. 牛客练习赛10 B栈和排序【思维】

    题目描述 给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序列 输入描述: 第一行一个数n 第二行n个 ...

  8. 牛客练习赛 25 E题 定向 【桥 + 思维】 无向图定方向变强连通图

    传送门 题意: 给定一个无向图, 然后你要给这幅图每条边加上一个方向, 使得这个图是有向图强连通 思路: 关键在于如何判断无解的情况, 如果能保证当前的图有解, 那么直接dfs一下就可以出答案. 仔细 ...

  9. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

最新文章

  1. 作为谷歌开发者布道师,我为什么要写这本通俗的《数据压缩入门》(二)
  2. LigerUI 使用教程表格篇
  3. rac中 kull session会话脚本
  4. mysql 数据类型 int_MySQL数据类型 int(M) 表示什么意思?
  5. beanfactorypostprocessor_Spring源码分析(六)容器的扩展点(BeanFactoryPostProcessor)
  6. 阿里云mysql写入性能_插入mysql类型
  7. shell开启飞行模式_原来手机飞行模式有这么多用处!99%的深圳人都不知道...
  8. 苏宁官方辟谣“员工猝死”:因个人身体原因晕倒
  9. 浏览器加载渲染网页过程解析-总结
  10. 【报告分享】2020大中华区人工智能成熟度调研:解码2020,展望数字未来.pdf(附下载链接)...
  11. [转载] c++list遍历_List、Set、数据结构、Collections
  12. ASP.NET中进行消息处理(MSMQ) 一 (转)
  13. jeecg字典表-系统字典
  14. GIS地理空间数据免费获取
  15. VBA代码宝(列表框)20220402
  16. 超级好用的流程图js框架
  17. [转帖]rsync简介
  18. 华为MA5626-8密码恢复及设置
  19. 信息科学技术与创新之“知识升华”
  20. ❤520给她准备的情人节礼物~html+css+javascript漫天飞雪3D相册(含音乐)

热门文章

  1. copy-maven-plugin - where is it configured - Maven原理探究
  2. Require Busy dialog
  3. C4C Adapt menu debugging
  4. Kubernetes里的secret最基本的用法
  5. CRM Fiori Opportunity应用点了edit之后超时的问题分析
  6. 如何启用SAP C4C OData Event Notification
  7. linux查文件的前几行,Linux--查询文件的第几行到第几行命令
  8. python中print怎么用_python的print怎么用
  9. spark用scala读取hive表数据(不同版本区别)
  10. 昆明大专学计算机,昆明冶金高等专科学校2020年云南省高等教育招收中等职业学校学生 (计算机类)考试大纲...