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;
            }
        }
    }
}
相关推荐
fpcc8 小时前
c++编程实践—堆和栈越界调试
c++
yi0118 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
weiabc10 小时前
MSYS2 UCRT64 + g++ C++ 中文输出乱码 完整全过程
c++
灯澜忆梦11 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
禾小西11 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
小蒋观天下11 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J11 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛11 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有12 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu11111112 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode