在jxzz上发现的一个做题网站,每周都有训练题,题目质量……前三题比较水,后面好神啊,而且类型差不多,这周似乎是计数专题……

Army Game

然后给出n*m,问需要多少个小红点能全部占领

解法:乘法。。。

Best Divisor

给一个数,问一个数的约数中数字和最大的约数。

解法:直接分解质因数就可以啦。

Twins

孪生质数定义为两个质数之差为2,问n,m之间有多少个孪生质数(n<=m<=10^9,m-n<=10^6)

解法:显然直接判断区间内相邻的两个奇数是否为质数就可以啦。然而n和m比较大,所以判断是否为质数不能直接用sqrt(n)这样去枚举,可以先用线性筛处理出sqrt(n)的质数,判断的时候直接枚举质数表里面的质数就可以啦。

  #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<algorithm>
#include<stack>
#include<cmath>
#include<map>
#define LL long long
#define maxn 1000100 using namespace std; int n,m,now,sum,prime[maxn],ok[maxn],tot=;
void calc()
{
int i,k;
for (i=;i<maxn;i++) {
if (!ok[i]) prime[tot++]=i;
for (LL j=(LL)(i)*prime[k=];j<maxn;j=i*prime[++k]) {
// printf("%lld %d\n",j,i);
ok[j]=;
if (!(i%prime[k])) break;
}
}
// for (int i=0;i<tot;i++) printf("\t%d",prime[i]);
} int check(int x)
{
if (x==) return ;
for (int i=;i<tot && prime[i]<=sqrt(x);i++)
if (!(x%prime[i])) return ;
return ;
} int main()
{
calc();
scanf("%d %d",&n,&m);
now=,sum=;
if (!(n%)) n++;
for (int i=n;i<=m;i=i+)
if (check(i)) {
if (now) ++sum;
else ++now;
}
else
now=;
printf("%d\n",sum);
return ;
}

Music on the Street

给出一些在数轴点(n<10^6),给出一个长度m(<10^9),再给一个hmin,hmax,找到一个区间使区间内两个点直接的距离大于hmin小于hmax,头尾两个点离区间端点距离大于hmin小于hmax。

解法:队列模拟一下就可以啦。

如果队头的点和当前的点距离大于m就出队,

同时如果当前点和队尾的点不满足距离大于hmin小于hmax,全部出队。

当前点进队

同时记录一个当前左端允许的最左边界=max(上一个出队的点,当前对头-hmax)

然后计算对头允许的区间+m和队尾的点的大于hmin小于hmax有没有交集(判断方法两个区间左端点最大值小于等于两个区间右端点最小值,一直这里判断错,要么就是复杂了……

有的话就是一个合法解啦。

然后要注意一些情况,比如m比hmax小……有可能直接就……

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<algorithm>
#include<stack>
#include<cmath>
#include<map>
#define maxn 1000100
using namespace std; int n,len,hmin,hmax,i,num[maxn];
queue<int> pp; int calc()
{
int lnow,i;
num[]=num[]-hmax-;
lnow=num[];
num[n+]=num[n]+hmax+;
pp.push(i=);
while (++i<=n) {
int last,l1,l2,l3,l4;
while (pp.size() ) {
if (num[i]-num[last=pp.front()]+hmin<=len
&& num[i]-num[pp.back()]<=hmax
&& num[i]-num[pp.back()]>=hmin ) break;
lnow=num[last];
pp.pop();
}
pp.push(i);
last=pp.front();
lnow=max(lnow,num[last]-hmax);
if (num[last]-lnow>=len && len<=hmax) return num[last]-len;
if (pp.size()) {
l1=max(lnow,num[last]-hmax)+len;
l2=num[last]-hmin+len;
l3=num[i]+hmin;
l4=min(num[i+],num[i]+hmax);
if (max(l1,l3)<=min(l2,l4)) return max(l1,l3)-len;
}
}
return -;
} int main()
{
scanf("%d",&n);
for (i=;i<=n;i++) scanf("%d",&num[i]);
scanf("%d %d %d",&len,&hmin,&hmax);
printf("%d\n",calc());
return ;
}

Satisfactory Pairs

ax+by=n(<3*10^5),给出n,问多个对点对(a,b)其中a<b。

解法:太弱了不会……潘学姐给思路了还是不会……

贴题解

意思就是先找出所有数的约数(用vector存起来)

然后公式化为ax=n-by,然后第一层循环枚举b,第二层循环枚举y,然后再枚举(n-by)的约数中小于b的,然后y值不用的时候可能有相同的约数导致重复,所以开个数组储存一个当前这个约数被最新更新的b值,每次判断下这个约数是否已经被b求过,没有的话ans++。

复杂度分析是调和数列求和。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<algorithm>
#include<stack>
#include<cmath>
#include<map>
#include<vector>
#define maxn 301020
#define LL long long
using namespace std; int num[maxn],prime[maxn],p[maxn],tot=;
vector<int> d[maxn];
int n;
void atfirst()
{
int i,j,l;
LL k;
for (i=;i<maxn;i++) {
if (!p[i]) {
p[i]=i;
prime[tot++]=i;
}
for (k=i*prime[j=];j<tot && k<maxn;k=i*prime[++j]) {
p[k]=prime[j];
if (!(i%prime[j])) break;
}
}
d[].push_back();
for (i=;i<maxn;i++) {
int x=i,y=;
while (!(x%p[i])) {
y++;
x/=p[i];
}
for (j=;j<d[x].size();j++)
for (k=d[x][j],l=y;l;l--,k*=p[i])
d[i].push_back(k);
sort(d[i].begin(),d[i].end());
}
} int main()
{
atfirst();
scanf("%d",&n);
memset(num,,sizeof(num));
int ans=;
for (int b=;b<n;b++)
for (int i=;i*b<n;i++) {
int x=n-i*b;
for (int j=;j<d[x].size() &&d[x][j]<b;j++)
if (num[d[x][j]]!=b) {
ans++;
num[d[x][j]]=b;
}
}
printf("%d\n",ans);
return ;
}

Hard Homework

给一个n(3*10^6),求一组x+y+z=n使sin(x)+sin(y)+sin(z).

解法,如果是两个数的和,显然很简单,和差化积就变成2*sin((x+y)/2)cos((x-y)/2),然后只需要知道cos((x-y)/2)的最大值就可以了,这里分情况,和为偶数则最大值显然为cos(0),如果为奇数,x-y的取值范围是(2,n-2),线性就可以求出。

那现在三个数,枚举第一个数,预处理出cos((2,n-2)/2)的最大值,然后就可以一直求出后面两个数的最大值啦。

(然而这思路分析也是受潘学姐的启发,学姐好棒)

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<algorithm>
#include<stack>
#include<cmath>
#include<map>
#define exp 0.0000000001
using namespace std; int n;
int main()
{
scanf("%d",&n);
double num1=-,ans=-exp;
for (int i=n-;i;i--) {
int now=n-i;
double now1;
if (now%) {
double now2=cos((now-)/2.0);
if (now2-num1>=exp) num1=now2;
now1=sin(i)+*sin(now/2.0)*num1;
}
else
now1=sin(i)+*sin((now)/2.0);
if (now1-ans>=exp) ans=now1;
}
printf("%.9lf\n",ans);
return ;
}

Hard Homework

Tastes Like Winning

nim问题,n堆,每堆可能取值为(1-2^m-1),问多少种情况使每堆数量不同且先手胜,n,m<10^9,答案%(10^9+7),(10^9+7)都是神题

解法:不会写,看不懂,

【hackerrank】Week of Code 26的更多相关文章

  1. 【hackerrank】Week of Code 30

    Candy Replenishing Robot Find the Minimum Number 直接模拟 Melodious password dfs输出方案 Poles 题意:有多个仓库,只能从后 ...

  2. 【LeetCode】89.Gary Code

    Problem: The gray code is a binary numeral system where two successive values differ in only one bit ...

  3. 【转】Visual Studio Code必备插件

    先ctrl+shift+p,弹出命令面板-选中Extensions:Install Extensions 或者直接点击左侧栏这个扩展按钮(Ctrl+Shift+X) 然后左侧栏就会显示出很多插件,如图 ...

  4. 【HackerRank】How Many Substrings?

    https://www.hackerrank.com/challenges/how-many-substrings/problem 题解 似乎是被毒瘤澜澜放弃做T3的一道题(因为ASDFZ有很多人做过 ...

  5. 【HackerRank】Running Time of Quicksort

    题目链接:Running Time of Quicksort Challenge In practice, how much faster is Quicksort (in-place) than I ...

  6. 【LeetCode】89. Gray Code

    题目: The gray code is a binary numeral system where two successive values differ in only one bit. Giv ...

  7. 【转】Visual Studio Code 使用Git进行版本控制

    原文链接:https://www.cnblogs.com/xuanhun/p/6019038.html?utm_source=tuicool&utm_medium=referral 本来认为此 ...

  8. 【编辑器】Visual Studio Code

    1.官网:https://code.visualstudio.com/Download 2.插件:https://marketplace.visualstudio.com/VSCode https:/ ...

  9. 【EF】EF框架 Code First Fluent API

    在Code First方法中,还可以通过Fluent API的方式来处理实体与数据表之间的映射关系. 要使用Fluent API必须在构造自定义的DbContext时,重写OnModelCreatin ...

随机推荐

  1. Drupal中自定义登录页面

    通过覆写template定义新的user_login表单来为自定义登录页面.方法: 1.  本站使用的主题是Rorty.来到\sites\all\themes\rorty,打开template.php ...

  2. STM32堆栈指针疑问

    1. 下面的代码看的不是很明白,百为stm32开发板光盘\测试程序\CortexM3\Mode_Privilege\project,堆是程序员分配和使用的,栈是编译器指定的,存放函数参数,临时变量. ...

  3. 虚拟机安装win7 64位-完美解决-费元星

    安装虚拟机是为了安装一个oracle ,在本机安装 ,本机会卡死,不是每次启动电脑都用oralce,而且有时候服务是关不干净的,所以安装在虚拟机里,需要的时候在开启,特做此记录! 费元星版权Q[971 ...

  4. 通过 zxing 生成二维码

    二维码现在随处可见,在日常的开发中,也会经常涉及到二维码的生成,特别是开发一些活动或者推广方面的功能时,二维码甚至成为必备功能点.本文介绍通过 google 的 zxing 包生成带 logo 的二维 ...

  5. JMeter 录制APP脚本

    具体步骤: 1.启动JMeter: 2.在“测试计划”中添加“线程组”: 3.“工作台”中添加“HTTP代理服务器”: 4.配置代理服务器:端口:8888(默认值),HTTPS Domains:192 ...

  6. Java开发工程师(Web方向) - 03.数据库开发 - 第4章.事务

    第4章--事务 事务原理与开发 事务Transaction: 什么是事务? 事务是并发控制的基本单位,指作为单个逻辑工作单元执行的一系列操作,且逻辑工作单元需满足ACID特性. i.e. 银行转账:开 ...

  7. Python全栈 MongoDB 数据库(Mongo、 正则基础、一篇通)

                  终端命令:       在线安装:         sudo apt-get install mongodb         默认安装路径 :  /var/lib/mong ...

  8. Ext JS 6学习文档-第6章-高级组件

    Ext JS 6学习文档-第6章-高级组件 高级组件 本章涵盖了高级组件,比如 tree 和 data view.它将为读者呈现一个示例项目为 图片浏览器,它使用 tree 和 data view 组 ...

  9. v-if或者v-repeat等不起作用

    v-if或者v-for等不起作用 在项目中,有时遇到了v-if或v-for等形式时,页面没起作用.以下可能是出现这些问题的原因: 1.绑定值是接口返回的某个属性值,而这个属性值不存在data()中,这 ...

  10. 软件工程part5

    1.本周psp 2.本周饼状图 3.本周进度条