贪心实践

有 nn 根棍子,棍子 ii 的长度为 a_iai。想要从中选出 33 根棍子组成周长尽可能长的三角形。

请输出最大的周长,若无法组成三角形则输出 00。

输入

  • 第一行,一个整数 n(3 \leq n \leq 100)n(3n100),表示棍子数量
  • 第二行 nn 个整数,表示每个棍子的长度 a_i(1 \leq a_i \leq 10^6)ai(1ai106)

输出

  • 一个整数,最大周长

#include <bits/stdc++.h> using namespace std; int main() { int n,a[100]; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); for(int i=n-1;i>=0;i--) for(int j=i-1;j>=0;j--) for(int k=j-1;k>=0;k--) if(a[i]+a[j]>a[k] && a[i]+a[k]>a[j] && a[k]+a[j]>a[i]){ cout<<a[i]+a[j]+a[k]<<endl; return 1; } cout<<0; return 0; }
字典序最小问题 Best Cow Line
#include <bits/stdc++.h>
using namespace std;
int FrontLast(char s[],int i,int j){
    while(s[i]==s[j]&& i<j){
        i++;j--;
    }
    return s[i]-s[j];
}
int main() {
    int i,j,n,res,k=0;
    char s[2001],t[2001];
    cin>>n;
    for(i=0;i<n;i++)
        cin>>s[i];
    i=0;j=n-1;
    while(i<j){
        res=FrontLast(s,i,j);
        if(res>=0)
            t[k++]=s[j--];
        else
            t[k++]=s[i++];
    }
    t[k++]=s[i];
    t[k]='\0';
    cout<<t;
}

 212. 区间调度问题

const int N = 100010;
struct Node {
    int l; int r;
}node[N];
int n;

bool cmp(const struct Node& a, const struct Node& b) {
    return a.r < b.r;
}

void solve() {
    sort(node, node + n, cmp);//结构体数组的排序

    int currEnd = -9999999;
    int ans = 0;
    for (int i = 0; i < n; i++) {
        if (currEnd < node[i].l) {
            ans++; currEnd = node[i].r;
        }
    }

    cout << ans << endl;

    return ;
}

int main()
{
    while (cin >> n) {
        for (int i = 0; i < n; i++) {
            int a, b;
            cin >> a >> b;
            if (a > b) { swap(a, b); }
            node[i].l = a; node[i].r = b;
        }

        solve();
    }

    return 0;
}

 

 

 

posted on 2022-08-07 22:10  ewitt  阅读(18)  评论(0编辑  收藏  举报

导航