链接:https://ac.nowcoder.com/acm/contest/634/B
来源:牛客网 给出n条线段,第i条线段的长度为ai,
每次可以从第i条线段的j位置跳到第i + 1条线段的j+1位置。
如果第i+1条线段长度不到j+,那么就会回到第i条线段的0位置,然后继续跳。
问从第i条线段的0位置跳到第n条线段需要跳多少次
为了减少输入量,a数组将由以下方式得到 unsigned int SA, SB, SC;
int mod;
unsigned int Rand(){
SA ^= SA << ;
SA ^= SA >> ;
SA ^= SA << ;
unsigned int t = SA;
SA = SB;
SB = SC;
SC ^= t ^ SA;
return SC;
}
int main() {
cin>>n>>mod>>SA>>SB>>SC;
for(int i = ;i <= n;++i) a[i] = Rand() % mod + ;
}
输入描述:
第一行两个正整数n,mod,表示一共有n条线段 第二行3个数字,分别为SA,SB,SC
输出描述:
一行一个数字,表示从每条线段跳到n的次数之和。 示例1
输入 输出 备注:
≤n≤×1e7
≤mod≤

题意:(如上,a数组非键盘输入得到,而是调用上列已给函数得到a数组)

思路: 如果线段之间跳跃中不存在归零的跳法,则ans=(1+2+3+.....(n-1))  =    n*(n-1) / 2,

  而真正的答案是ans=正常跳数+归零跳数。正常的跳数,已被求得,那么只需要再求出归零跳数即可。

  至于如何求归零跳数,逆向思维即可。

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<stack>
#include<algorithm>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f;
const double pi=acos(-1.0); ll n,a[];
unsigned int SA, SB, SC;
int mod;
unsigned int Rand(){
SA ^= SA << ;
SA ^= SA >> ;
SA ^= SA << ;
unsigned int t = SA;
SA = SB;
SB = SC;
SC ^= t ^ SA;
return SC;
}
int main() {
cin>>n>>mod>>SA>>SB>>SC;
for(int i = ;i <= n;++i) a[i] = Rand() % mod + ;
ll ans;
if (n&)
ans=(n-)/*n;
else
ans=n/*(n-);
ll tmp=a[n],cnt=;
for (int i=n-;i>=;i--){
tmp--;
tmp=min(a[i],tmp);
if (tmp==){
cnt=cnt+(i-); //第i线段以上的线段在这里都要执行归零跳法
tmp=a[i];
} }
cout<<ans+cnt<<endl;
return ;
}


链接:https://ac.nowcoder.com/acm/contest/634/C
来源:牛客网 题目描述
给出一个区间[L,R],求出[L,R]中孪生质数有多少对。
由于这是一个区间筛质数的模板题。所以小k不屑于去写。
所以出题人只好yy了另一道题。
定义k生互质数为满足y + k与y - k互质的数。
现在给出区间[L,R],你需要输出区间内k生互质数有多少对
我们说一对k生互质数在区间[L,R]内,当且仅当
y+k∈[L,R]
y+k∈[L,R]且y−k∈[L,R]
y−k∈[L,R]
输入描述:
一行三个数字L,R,k
输出描述:
一行一个数字表示区间[L,R]内的k生互质数的对数
示例1
输入 输出       说明
      分别为(,),(,)
示例2
输入 10
输出 4532 备注:
≤L,R≤1e18
≤L,R≤1e18
≤k≤1e13
题解:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<stack>
#include<algorithm>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f;
const double pi=acos(-1.0); ll l,r,k;
ll prime[];
bool check[];
int cnt;
void prim()
{
memset(check,false,sizeof(check));
check[]=check[]=true;
cnt=;
for (int i=;i<;i++){
if (!check[i])
prime[cnt++]=i;
for (int j=;j<cnt&&i*prime[j]<;j++){
check[i*prime[j]]=true;
if (i%prime[j]==)
break;
}
}
}
ll a[];
int main()
{
prim();
cin>>l>>r>>k;
ll p=;//质因数的个数
ll tmp=k<<;
/* for (int i=0;;i++){
if (tmp%prime[i]==0){
a[p++]=prime[i];
while (tmp%prime[i]==0){
tmp/=prime[i];
}
}
if (tmp<=1)
break;
}*/
for(int i=;i*i<=tmp;i++){
if(!(tmp%i)){
a[p++]=i;
while(!(tmp%i))
tmp/=i;
}
}
if(tmp>)
a[p++]=tmp; ll sum=;
tmp=<<p;// 存在p个质数,则有pow(2,p)种的组合数,
for (int i=;i<tmp;i++){
ll t=,s=; //t是质因数的公倍数,s则为选举的质因数的个数
for (int j=;j<p;j++){
if (i&(<<j)){
s++;
t*=a[j];
}
}
if(r/t>(l+*k-)/t){ //容斥 奇加偶减
if(s%)sum-=r/t-(l+*k-)/t;
else sum+=r/t-(l+*k-)/t;
}
}
cout<<sum<<endl;
return ;
}

 

牛客练习赛44 B题 (思维)的更多相关文章

  1. 牛客练习赛44 B 小y的线段 (思维)

    链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出n条线段,第i条线段的长度为a_ia i ​ ,每次可以从第i条线段的j位置跳到第 ...

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

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

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

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

  4. 牛客练习赛44 C:小y的质数

    链接:https://ac.nowcoder.com/acm/contest/634/C?tdsourcetag=s_pcqq_aiomsg 来源:牛客网 题目描述 给出一个区间\([L,R]\),求 ...

  5. 牛客练习赛38 D 题 出题人的手环 (离散化+树状数组求逆序对+前缀和)

    链接:https://ac.nowcoder.com/acm/contest/358/D来源:牛客网 出题人的手环 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他 ...

  6. 牛客练习赛32 B题 Xor Path

    链接:https://ac.nowcoder.com/acm/contest/272/B来源:牛客网 题目描述 给定一棵n个点的树,每个点有权值.定义表示  到  的最短路径上,所有点的点权异或和. ...

  7. 牛客练习赛51 D题

    链接:https://ac.nowcoder.com/acm/contest/1083/D来源:牛客网 有一个草原可以用一个1~400的数轴表示.有n头羊和q个查询.每头羊的编号分别是1,2,3…n. ...

  8. 牛客练习赛44 B:小y的线段

    链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出\(n\)条线段,第\(i\)条线段的长度为\(a_i\),每次可以从第\(i\) ...

  9. 牛客练习赛53 B题调和级数

    https://ac.nowcoder.com/acm/contest/1114/B 这题时间卡的比较死,多了一个快速幂的logn就过不了这题. #include<bits/stdc++.h&g ...

随机推荐

  1. JSP内置对象——out对象/request对象

    在这个科技高速发展的时代,迫使我们的脚步一刻都不能停下. 在这个for循环语句当中,我们可以直接使用jsp内置对象中的out对象来给浏览器打印输出,那么这个out对象就是一个内置对象, 在这里,我们使 ...

  2. AsyncTask GET请求

    布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  3. apktool逆向apk包

    在AndroidStudio创建so一节里创建了so,并且在java里面调用so的HelloWorld方法,编译Android Studio后生成包app-debug.apk. 在逆向apk时如果该a ...

  4. springcloud 入门 1 (浅谈版本关系)

    SpringCloud: 参考官网:https://projects.spring.io/spring-cloud/            中文版         https://springclou ...

  5. 使用 Azure PowerShell 管理 Azure 虚拟网络和 Windows 虚拟机

    Azure 虚拟机使用 Azure 网络进行内部和外部网络通信. 本教程介绍了如何在虚拟网络中创建多个虚拟机 (VM),以及如何在虚拟机之间配置网络连接. 你将学习如何执行以下操作: 创建虚拟网络 创 ...

  6. EntityFramework Code-First 简易教程(二)-------Code First约定

    Code First 约定 在前一篇中,我们已经知道了EF Code-First怎样从模型类(domain classes)中创建数据库表,下面,我们开始学习默认的Code-First约定. 什么是约 ...

  7. webservice安全性浅谈

    原文地址:http://www.cnblogs.com/chhuic/archive/2009/11/19/1606109.html 做项目时,经常会用到WebService来通讯,但WebServi ...

  8. rsync 数据同步

    什么是Rsync? Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地货远程数据同步备份的优秀工具.适用于unix/linux/windows等多种操作系统平台. Rsync具有可使本地 ...

  9. OpenGL超级宝典笔记——画三角形(转)

    http://my.oschina.net/sweetdark/blog/161002 学习了画线的知识,我们可以使用GL_LINE_LOOP来画闭合的多边形.但是使用这种方式画出来的只有线框,多边形 ...

  10. Google常用脚本

    1.Tampermonkey 可下载常用脚本:https://greasyfork.org/zh-CN 2.常用FQSetupVPN 3.百度药丸屏蔽广告 4.百度文档可粘贴,下载 5.VIP视频可看