首页 > 其他分享 >蒟蒻的补档题……

蒟蒻的补档题……

时间:2024-02-25 22:35:19浏览次数:27  
标签:point int double rep 补档 && define

补档

长期更新……这里是我做过并且感觉有收获的题

小仙女过生日啦

看了题解,是“区间dp经典例题——“凸多边形的三角剖分””……但是还没懂

知识点

1.叉积求三角形面积

之前自己只会个海伦公式……

找这个的时候我还看到了行列式,是线代里的,自己本来是打算寒假学的,结果净去过写题了……

double S(point a,point b,point c){
    //注意这里相减的顺序不能变
	return fabs((b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x))/2;
}

2.判断一个点是否在三角形内

bool judge(point a,point b,point c){
	double s1=S(a,b,c);
	rep(i,1,n){
		int x=p[i].x,y=p[i].y;
		if(x==a.x&&y==a.y||x==b.x&&y==b.y||x==c.x&&y==c.y){
			continue;
		}
		double s2=S(a,b,p[i])+S(a,c,p[i])+S(b,c,p[i]);
        //因为是浮点数,所以不能直接相等
		if(fabs(s1-s2)<=1e-8) return false;
	}
	return true;
}

代码

蒟蒻只会dp的板子,这主函数部分就看不懂了……

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
const int N=1e2+5;
double f[N][N];
int n;
struct point{
	double x,y;
}p[N];
double S(point a,point b,point c){
	return fabs((b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x))/2;
}
bool judge(point a,point b,point c){
	double s1=S(a,b,c);
	rep(i,1,n){
		int x=p[i].x,y=p[i].y;
		if(x==a.x&&y==a.y||x==b.x&&y==b.y||x==c.x&&y==c.y){
			continue;
		}
		double s2=S(a,b,p[i])+S(a,c,p[i])+S(b,c,p[i]);
		if(fabs(s1-s2)<=1e-6) return false;
	}
	return true;
}
signed main()
{
//std::ios::sync_with_stdio(false);
//cin.tie(0);
//cout.tie(0);
	while(cin>>n){
		rep(i,1,n) cin>>p[i].x>>p[i].y;
		rep(i,1,n-2){
			f[i][i+2]=S(p[i],p[i+1],p[i+2]);
		}
		rep(len,4,n){
			rep(i,1,n-len+1){
				int j=i+len-1;
				f[i][j]=0x3f3f3f3f;
				rep(k,i+1,j-1){
					if(judge(p[i],p[k],p[j])){
						f[i][j]=min(f[i][j],max(S(p[i],p[k],p[j]),max(f[i][k],f[k][j])));
					}
				}
			}
		}
		cout<<fixed<<setprecision(1)<<f[1][n]<<endl;		
	}

	return 0;
}

Forsaken喜欢数论

求前n个数的最小质因子的和。

在从 1 到 n遍历整数时,使用筛法求素数。
如果本身是素数,那么它本身就是它的最小质因子,累加计入 ans。
遍历由该素数生成的合数,如果还没访问过,表示这个合数的最小质因子就是该素数,累加计入ans。——Forsaken喜欢数论_牛客博客

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
//const int N=1e2+5;
//int v[N];
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
	int n,ans=0;cin>>n;
	vector<bool>v(n+1,0);
	for(int i=2;i<=n;i++){
		if(!v[i]){
			ans+=i;
			for(int j=i*i;j<=n;j+=i){
				if(!v[j]){
					v[j]=1;
					ans+=i;
				}
			}
		}
	} 
	cout<<ans;
	return 0;
}

标签:point,int,double,rep,补档,&&,define
From: https://www.cnblogs.com/mono-4/p/18033236

相关文章

  • 本地套接字 [补档-2023-07-24]
    本地套接字7-1简介​在Linux系统下,可以使用本地套接字(Unix域套接字)进行进程间通信。本地套接字是一种特殊类型的套接字,用于在同一主机上的进程之间进行通信。7-2创建本地套接字服务器的流程​可以使用TCP或UDP的方式来实现通信,使用TCP就得遵循TCP的流程,UDP就要遵循UD......
  • Libevent [补档-2023-08-29]
    libevent的使用8-1安装​自己百度一下,安装它不是特别难,加油!!!8-2libevent介绍​它是一个开源库,用于处理网络和定时器等等事件。它提供了跨平台的API,能够在不同的操作系统上实现高性能,可扩展的世界去的编程。​1.事件驱动:libevent使用事件驱动模型,通过监听事件的......
  • 多路io复用Select [补档-2023-07-16]
    select2.1简介​select函数可以用于实现高效的多路复用I/O,同时处理多个文件描述符的事件,包括监听可读、可写和异常条件,具有阻塞和非阻塞模式,并可以设置超时时间。这使得程序能够高效地处理并发任务,提高性能和响应性。2.2select函数​头文件:#include<sys/select>......
  • 多路io复用pool [补档-2023-07-19]
    多路IO-poll3.1简介​poll的机制与select类似,他们都是让内核在以线性的方法对文件描述符集合进行检测,根据描述符的状态进行具体的操作。并且poll和select在检测描述符集合时,会在检测的过程中频繁的进行用户区和内核区的拷贝,随着文件描述符集合中的数量增大,开销也随之增大,效......
  • 多路io复用epoll [补档-2023-07-20]
    多路io-epoll4-1简介​它是linux中内核实现io多路/转接复用的一个实现。(epoll不可跨平台,只能用于Linux)io多路转接是指在同一个操作里,同时监听多个输入输出源,在其中一个或多个输入输出源可用时范慧慧这个源,然后对其进行操作。​epoll采用红黑树来管理待检测的集合,而p......
  • UDP通信 [补档-2023-07-22]
    UDP通信6-1简介​UDP通信是面向无链接的,不稳定,不可靠,不安全的一种通信方式。TCP在通信前发送方会向接收方进行三次握手链接,然后确认双方链接后才会进行数据传输,最后四次挥手保证链接关闭。而UDP不会三次握手四次挥手,它会直接向发送方发送数据,无论接收方是否会收到,所以UDP更......
  • socket编程 [补档-2023-07-10]
    Linux网络编程1.socket编程socket是一种通信机制,用于在网络中不同计算机之间进行数据传输,当然也可用用于进程间通信。在linux中,有文件描述符这么个东西,我们可以通过socket函数创建一个网络连接,socket的返回值为一个文件描述符,我们拿到这个文件描述符就可以像操作普通io文件那样......
  • Linux进程间通信 [补档-2023-07-27]
    Linux进程间通信10-1简介​在Linux下,进程之间相互独立,每个进程都有自己不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问。如果非要交换数据则必须通过内核,在内核中开辟一块缓冲区。假设有两个进程AB,他们之间想......
  • Linux的信号管理 [补档-2023-07-30]
    信号11-1简介:​信号只是表示某个信号,不可以携带大量信息,信号需要满足特点的条件才会产生。是一种特别的通信手段。11-2信号机制:​假设有两个进程A,B,现在进程A给进程B发送信号,进程B在收到信号之前会执行自己的代码,当收到信号后,无论执行到了哪里,都要暂停执......
  • Linux文件IO之二 [补档-2023-07-21]
    8-5linux系统IO函数:open函数:​函数原型:intopen(constchar*pathname,intflags,mode_tmode);​功能:打开一个文件并返回文件描述符。与c库中的fopen差不多​参数:pathname:要打开的文件路径名。flags:打开文件的标志O_RDONLY(只读)O_WRONLY(只写)O_RD......