贪心实践
有 nn 根棍子,棍子 ii 的长度为 a_iai。想要从中选出 33 根棍子组成周长尽可能长的三角形。
请输出最大的周长,若无法组成三角形则输出 00。
输入
- 第一行,一个整数 n(3 \leq n \leq 100)n(3≤n≤100),表示棍子数量
- 第二行 nn 个整数,表示每个棍子的长度 a_i(1 \leq a_i \leq 10^6)ai(1≤ai≤106)
输出
- 一个整数,最大周长
#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; }