251106 算法

问题 A: C002 赌徒

cpp 复制代码
#include<stdio.h>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
ll arr[1005];
int main(){
    int n;
    while(scanf("%d",&n) != EOF){
        if(n == 0)break;
        for(int i = 0;i < n;i++){
            scanf("%lld",&arr[i]);
        }
        sort(arr,arr + n);
        long long max_winner = -1;
        bool found = false;

        for(int i = n - 1;i >= 0;i--){
            ll target = arr[i];

            for(int j = 0;j < n;j++){
                if(j == i)continue;
                int left = j + 1;
                int right = n - 1;
                while(left < right){
                    if(left == i){
                        left++;
                        continue;
                    }
                    if (right == i) {
                        right--;
                        continue;
                    }
                    ll sum = arr[j] + arr[left] + arr[right];
                    if(sum == target){
                        if(!found || target > max_winner){
                            max_winner = target;
                            found = true;
                        }
                        break;
                    }
                    else if(sum < target){
                        left++;
                    }else{
                        right--;
                    }
                }

                if(found && max_winner == target){
                    break;
                }

        }
        if(found)break;
    }
    if(found){
        cout << max_winner << endl;
    }else{
        cout << "no solution"<< endl;
    }
    }
}
cpp 复制代码
#include<stdio.h>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
int arr[10005];

int main(){
    int n,k;
    scanf("%d%d",&n,&k);
    int max_len = 0;
    for(int i = 0;i < n;i++){
        double temp;
        scanf("%lf",&temp);
        arr[i] = temp * 100;
        if(arr[i] > max_len) max_len = arr[i];
    }

    int left = 1;
    int right = max_len;
    int res = 0;
    while(left <= right){
        int mid = left + (right - left)/2;
        int cnt = 0;
        for(int i = 0;i < n;i++){
            int c = arr[i] / mid;
            cnt += c;
        }
        if(cnt >= k){
            res = mid;
            left = mid + 1;
        }else{
            right = mid - 1;
        }
    }
    double r = (double)res / 100;
    printf("%.2f\n",r);

}
cpp 复制代码
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int x, y;
} Point;


int compare_points(const void *a, const void *b) {
    Point *p1 = (Point *)a;
    Point *p2 = (Point *)b;
    if (p1->x != p2->x) return p1->x - p2->x;
    return p1->y - p2->y;
}


int point_exists(Point *points, int n, Point p) {
    int left = 0, right = n - 1;
    while (left <= right) {
        int mid = (left + right) / 2;
        int cmp = compare_points(&points[mid], &p);
        if (cmp == 0) return 1;
        if (cmp < 0) left = mid + 1;
        else right = mid - 1;
    }
    return 0;
}

int main() {
    int n;
    while (scanf("%d", &n) == 1 && n != 0) {
        Point *points = (Point *)malloc(n * sizeof(Point));
        for (int i = 0; i < n; i++) {
            scanf("%d %d", &points[i].x, &points[i].y);
        }
        
        
        qsort(points, n, sizeof(Point), compare_points);
        
        int ans = 0;
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                int x1 = points[i].x, y1 = points[i].y;
                int x2 = points[j].x, y2 = points[j].y;
                
                
                int dx = x2 - x1, dy = y2 - y1;
                
                
                Point p3 = {x1 - dy, y1 + dx};
                Point p4 = {x2 - dy, y2 + dx};
                if (point_exists(points, n, p3) && point_exists(points, n, p4)) {
                    ans++;
                }
                
                
                Point p5 = {x1 + dy, y1 - dx};
                Point p6 = {x2 + dy, y2 - dx};
                if (point_exists(points, n, p5) && point_exists(points, n, p6)) {
                    ans++;
                }
            }
        }
        
        
        ans /= 4;
        printf("%d\n", ans);
        
        free(points);
    }
    return 0;
}
cpp 复制代码
#include<stdio.h>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
ll arr[1005];
int main(){
    int z;
    while(scanf("%d",&z) != EOF){
        while(z--){
            ll n;//硬币个数
            scanf("%lld",&n);
            ll sum = 0;
            ll i = 1;
            for(i = 1;sum < n;i++){
                sum += i;
            }
            if(sum == n)cout << i - 1 << endl;
            else{
                cout << i - 2 << endl;
            }
        }
    }
}
相关推荐
你撅嘴真丑4 小时前
第九章-数字三角形
算法
在路上看风景4 小时前
19. 成员初始化列表和初始化对象
c++
uesowys4 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
zmzb01034 小时前
C++课后习题训练记录Day98
开发语言·c++
ValhallaCoder4 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮4 小时前
AI 视觉连载1:像素
算法
念风零壹5 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
智驱力人工智能5 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥6 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风6 小时前
代码随想录第十五天
数据结构·算法·leetcode