0

0

2015.2.25

php中文网

php中文网

发布时间:2016-06-07 15:14:10

|

1508人浏览过

|

来源于php中文网

原创

0.求最大公约数函数 int gcd( int a, int b) { //求最大公约数 if (a b) return gcd(b, a); if (b % a == 0 ) return a; return gcd(b % a, a);} 1.关于qsort与sort 1.1.qsort,包含在stdlib.h中 void qsort( list , sizeof ( list ), sizeof (Element_type)

0.求最大公约数函数

int gcd(int a, int b) {     //求最大公约数 
    if(a > b) return gcd(b, a);
    if(b % a == 0) return a;
    return gcd(b % a, a);
}

1.关于qsort与sort

1.1.qsort,包含在stdlib.h中

void qsort(list, sizeof(list),sizeof(Element_type),Comp); // qsort的4个参数:数组的首地址、数组的实际大小,元素的实际大小,比较函数

int cmp(const void *p1,const void *p2 )//一般比较函数
{
     return *((Element_type *)p2) > *((Element_type *)p1) ? 1 : -1;//当p1>p2,return -1→降序排列(从大到小)
     /*return *(Element_type *)p1 - *(Element_type *)p2;
     是相同的效果;*/
}
int cmp(const void *p1,const void *p2)//字符串比较函数
{
return strcmp((char *)p2,(char *)p1);//p1>p2,return -1;t同理,降序排列;
}
int cmp(const void *p1,const void *p2)//一级结构体比较函数
{
return (*(Node *)p2)->data > (*(Node *)p1)->data ? 1 : -1;
}

1.2.sort,包含在头文件algorithm中

//基础升序排列
void sort(begin,end);//如int a[n];可用sort(a,a+n);
//自定义比较函数
void sort(begin,end,compare);
bool compare(Element_type a,Element_type b)
{
      return a//升序排列,如果改为return a>b,则为降序
}

2.pair类函数,包含在using namespace std;中

    pair<int, int> p1;
    p1.first = 1;
    p1.second = 2;//生成一个坐标为(1,2)的点,省略结构体定义过程

    set< pair<int, int> > a;//生成一个数组a,a元素由(int,int)的点构成,a其实是个结构体数组

    pair<string, pair<int, double> > p3;
    p3.first = "Memeda";
    p3.second.first = 2333;
    p3.second.second = 2.13;//this is also ok;

    make_pair(a,b)//将数据a与b建立坐标联系,a与b数据类型不限
    pair(a,b)//两者意思相近,前者自动匹配a,b数据类型,后者手动分配数据类型

3.set类函数,包含在头文件set中(施工中)
部分介绍:

c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。

1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,再插入新元素

2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数//鉴于还没搞清楚什么是迭代器,且慢总结

3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)

set的各成员函数列表如下(查阅用):

c++ stl容器set成员函数:begin()–返回指向第一个元素的迭代器

c++ stl容器set成员函数:clear()–清除所有元素

c++ stl容器set成员函数:count()–返回某个值元素的个数

c++ stl容器set成员函数:empty()–如果集合为空,返回true

c++ stl容器set成员函数:end()–返回指向最后一个元素的迭代器

c++ stl容器set成员函数:equal_range()–返回集合中与给定值相等的上下限的两个迭代器

c++ stl容器set成员函数:erase()–删除集合中的元素

c++ stl容器set成员函数:find()–返回一个指向被查找到元素的迭代器

c++ stl容器set成员函数:get_allocator()–返回集合的分配器

Sapling AI Content Detector
Sapling AI Content Detector

Sapling.ai推出的免费在线AI内容检测工具

下载

c++ stl容器set成员函数:insert()–在集合中插入元素

c++ stl容器set成员函数:lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器

c++ stl容器set成员函数:key_comp()–返回一个用于元素间值比较的函数

c++ stl容器set成员函数:max_size()–返回集合能容纳的元素的最大限值

c++ stl容器set成员函数:rbegin()–返回指向集合中最后一个元素的反向迭代器

c++ stl容器set成员函数:rend()–返回指向集合中第一个元素的反向迭代器

c++ stl容器set成员函数:size()–集合中元素的数目

c++ stl容器set成员函数:swap()–交换两个集合变量

c++ stl容器set成员函数:upper_bound()–返回大于某个值元素的迭代器

c++ stl容器set成员函数:value_comp()–返回一个用于比较元素间的值的函数

运用举例(待施工):

int main()//头文件略
{
    set<int> S;
    S.insert(77);
    S.insert(67);
    S.insert(88);
    S.insert(88);
    for(set<int> :: iterator it = S.begin(); it != S.end(); it++)
        cout<<*it<<" ";
    cout<//输出结果:67 77 88

    return 0;
}

4.计算几何技巧初窥.
例:
CodeForces - 514B
Han Solo and Lazer Gun

Description
There are n Imperial stormtroopers on the field. The battle field is a plane with Cartesian coordinate system. Each stormtrooper is associated with his coordinates (x,?y) on this plane.

Han Solo has the newest duplex lazer gun to fight these stormtroopers. It is situated at the point (x0,?y0). In one shot it can can destroy all the stormtroopers, situated on some line that crosses point (x0,?y0).

Your task is to determine what minimum number of shots Han Solo needs to defeat all the stormtroopers.

The gun is the newest invention, it shoots very quickly and even after a very large number of shots the stormtroopers don’t have enough time to realize what’s happening and change their location.

Input
The first line contains three integers n, x0 и y0 (1?≤?n?≤?1000, ?-?104?≤?x0,?y0?≤?104) — the number of stormtroopers on the battle field and the coordinates of your gun.

Next n lines contain two integers each xi, yi (?-?104?≤?xi,?yi?≤?104) — the coordinates of the stormtroopers on the battlefield. It is guaranteed that no stormtrooper stands at the same point with the gun. Multiple stormtroopers can stand at the same point.

Output
Print a single integer — the minimum number of shots Han Solo needs to destroy all the stormtroopers.

Sample Input

Input
4 0 0
1 1
2 2
2 0
-1 -1
Output
2

Input
2 1 2
1 1
1 0
Output
1

题目意思:给出双头枪的位置(x0, y0),以及 n 个突击队成员的坐标。双头枪射击一次,可以把它对住的方向(是直线,不是射线,因为是双头嘛)所有的人射杀掉。问将所有突击队成员消灭的最少射击数是多少。
解:
这题我首先想到的是斜率比较,输出不同斜率个数来实现,但由于两点坐标求斜率易出现精度误差,用斜率来直接求难度稍大,且难以debug,故采用累计不同向量方向的个数的方法来做。

#include
#include
#include
#include
#include
using namespace std;
int gys(int a, int b){//求最大公约数
    if(a > b) return gys(b , a);
    else if(b % a == 0) return a;
    return gys(b % a ,a);
}

int main(){
    int x,y,n;
    setint ,int> >a;
    while(scanf("%d %d %d", &n, &x, &y) != EOF){
        int p,q;
        for( int i = 0 ; i < n ; i++ ){
            scanf("%d %d", &p, &q);
//          cin >> p >> q;
            p -= x; q -= y;
            if(p == 0) a.insert(make_pair(0,1));
            else if(q == 0) a.insert(make_pair(1,0));//剪去(1,0)与(0,1)方向向量,
            else{
                int t = gys(abs(p) ,abs(q));
                p/= t;
                q/= t;
                if(p < 0){
                    p = -p;
                    q = -q;
                }
                a.insert(make_pair(p ,q));//两点向量(p,q)p与q均除以最大公约数t,得到方向向量(p/t,q/t)
            }
        }
//      cout << a.size() << endl;
        printf("%d\n", a.size());//输出不同方向向量个数即最少射击次数
    }
            return 0;
}

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

Golang进阶实战编程
Golang进阶实战编程

共34课时 | 2.6万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号