J. Lonely Numbers(线性筛+打表+找规律)
题目意思就是有一种新定义的两个数字之间的叫friend的关系,如果对于两个数字a,b ,有gcd(a,b), a/gcd(a,b), b/gcd(a,b)可以组成一个三角形(即两两之和大于第三边)的话,我们就说a和b是朋友。
现在给你一个数字n,要你输出1-n中有多少个数字没有朋友。
一般这种数据较大的多组样例是肯定要打表的,上来先找了一下规律,发现一个合数和任何数都可以是朋友,所以我们就先找到素数(线性筛打表),然后发现并不是所有的素数都没有朋友,每个素数和这个素数的平方一定是朋友。(对于一个素数k来说,三条边分别是k,1,k。两边之和一定大于第三边。)
所以我们需要找的素数就是从根号n到n的所有的素数的个数,这个操作只能用前缀和数组来实现,因为每次n的范围最大可能到1e6,如果每次都去找从根号n到n有多少个素数的话一定会超时。
最后的结果记得加上1。因为对于1和n来说,三条边分别是1,1,n,所以1跟任何数都不是朋友。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int p[N], a[N], idx, pre[N];
void xxs()
{
int kns = 0;
for(int i = 2; i <= N; i ++)
{
if(!a[i])
{
p[ ++ idx] = i;
kns ++;
}
for(int j = 1; j <= idx && i * p[j] <= N; j ++)
{
a[i * p[j]] = 1;
if(i % p[j] == 0) break;
}
pre[i] = kns;
}
}
int main()
{
xxs();
int t;
scanf("%d", &t);
while(t --)
{
int n;
scanf("%d", &n);
int k = sqrt(n);
printf("%d\n", pre[n] - pre[k] + 1);
}
return 0;
}
G. Years(差分思想+压缩)
这道题题意很简单。就是给你n个人,然后是每个人的出生年份和死亡年份,要你求出哪一个年活着的人数量最多,输出这个最大数量和这个年份,如果最大数量相同,输出年份较小的一个。
问题就在于这个区间的范围是1e9,这意味着我们不能用线段树来维护区间最大值(线段树需要开4e9)。
既然线段树不能用,自然就想到了差分。当时想的是:差分不也得开数组来维护吗?这不还是1e9的复杂度么,然后就没继续往下想。其实这道题就算差分不开数组也可以判定最大值的大小还有位置。
那具体怎么实现呢?
其实我们可以用两个点来维护差分,如果是左端点就标记为1,右端点就标记为-1(因为右端点指得是死亡年份,所以不用考虑在+1的区间里,实际就是全加1的区间的后一个点)。
可以使用vector+pair来存,然后将vector一遍再从标记值的累加值中找到最大的值并更新下标就可以。(这里是因为端点从小到大遍历能保证差分的性质不改变,如果端点相同的话就按标记的值从小到大排序。这里端点的标记值不按从大到小是因为我们记录的是端点的累加标记值的最大值,而如果先加大的的话会把在这一年死了的人算上,然后之后这个端点的值会减小,实际上的最大值是不考虑在这一年死了的人的,所以需要从小到大排)
代码:
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int> > P;
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; i ++)
{
int a,b;
scanf("%d%d", &a, &b);
P.push_back(pair<int,int>(a,1)); //这里注意push_back的内部结构。(需要pair!)
P.push_back(pair<int,int>(b, -1));
}
sort(P.begin(), P.end()); //pair的sort默认先对第一个元素排序,如果第一个元素相等,则对第二个元素排序。
int idx = 0;
int ans = -1;
int xb = 1; //这里下标从1开始是为了保证在最大值相等的情况下取更小的。
for(int i = 0; i < n * 2; i ++) //这里到 n*2是因为 对每个n我们放入了两个vector。
{
idx += P[i].second; //注意pair可以这样用。
if(idx > ans)
{
ans = idx;
xb = P[i].first;
}
}
printf("%d %d", xb, ans);
return 0;
}
Functional API,共享层模型,多输入多输出,神经网络中间层的可视化,中间层的权重信息
TTL是什么意思? TTL是一个ip协议的值,它告诉网络,数据包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。TTL 的初值通常是系统缺省值,是包头中的8位的域。TTL的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL域减一,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。在网络中主要是指ping网速中的TTL数值,ping命令相信熟悉网络的朋友都不会陌生,也为
<appSettings> <add key="ffmpeg" value="E:\ffmpeg\ffmpeg-20141012-git-20df026-win32-static\bin\ffmpeg.exe" /> <add key="CatchFlvImgSize" value="240x180" /></appSettings&...
学习Python就等于学习人工智能吗?当然不!千万不要混淆它们的概念!Python工程师并不等同于人工智能工程师。(关注公众号"猎维人工智能”)Python工程师与人工智能工程师最根本的区别是什么?Python和JAVA、C语言一样,是一种编程语言,所以从事Python开发的人员也只能算是程序员。而人工智能工程师是从事算法研究的,所以被称作算法工程师。一个是程序员,一个是算法工程师。这两...
查看所有POD:kubectl get pod查看某个POD: kubectl get pod name以JSON格式输出POD信息: kubectl get pod name --output json以yaml格式输出POD信息: kubectl get pod name --output yaml删除某个POD:kubectl delete pod name删除所有POD(慎用):k...
Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。下载Qt6最新试用版Qt组件推荐:QtitanRibbon|下载试用:遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribb..
论文地址:[2009.05991] GIKT: A Graph-based Interaction Model for Knowledge Tracing (arxiv.org)代码地址:ApexEDM/GIKT: GIKT: A Graph-based Interaction Model for Knowledge Tracing (github.com)个人理解:本篇文章使用图神经网络继续知识追踪,简单来说,就是借由图来得到更加合适的exercise和concept嵌入向量,然后送入后...
用pdf模板生成pdf文档很简单,首先需要手动做个pdf模板,上面有很多的类似html里的text域的东西,给他们起好名字,在程序里填充就可以了。虽然由于不会做模板(实际上由于短时间无法去熟悉使用Adobe Acrobat )而没有用到此篇文章(转载的别人的)(只好手动生成),但是感觉写的还是不错的。贴出来,以便将来用到了查看。首先要定义一个DataBean接口,代码如下:pu
来源:机器学习算法与Python实战本文多干货,建议收藏本文为你汇总机器学习相关数据集。大学公开数据集(Stanford)69G大规模无人机(校园)图像数据集【Stanford】http...
一、爬虫部分爬虫说明:1、本爬虫是以面向对象的方式进行代码架构的2、本爬虫爬取的数据存入到MongoDB数据库中3、爬虫代码中有详细注释4、爬虫爬取的美食是以无锡为例代码展示import jsonimport reimport timefrom pymongo import MongoClientimport requestsfrom lxml import htmlclass MeituanSpider(): def __init__(self): #
java的基本特征1.简单Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。Java语言的简单性主要体现在以下三个方面:Java的风格类似于C++,因而C++程序员是非常熟悉的。从某种意义上讲,Java语言是C及C++语言的一个变种,因此,C++程序员可以很快就掌握Java编程技术。Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。Ja...
安装Roboguide软件的详细步骤