-
Bio
Wrongman Answer `#include<bits/stdc++.h> using namespace std; /*结构体 单一元素的数组 已经不能满足我们做题目的需求
struct 结构体类型(自己定义){
int a; char b; double c; //自己去填需要的变量
}; 具体例子: */ struct student{ char name[10]; int age; int yuwen; int shuxue; }; //这是一个结构体类型
int main(){ student x[100]; //结构体数组 for(int i=1;i<=5;i++){ cin>>x[i].name+1>>x[i].age>>x[i].yuwen>>x[i].shuxue; } for(int i=1;i<=5;i++){ cout<< x[i].name+1<<" "<<x[i].age<<" "<<x[i].yuwen<<" "<<x[i].shuxue<<'\n'; }return 0;
}`
#include<bits/stdc++.h> using namespace std; struct student{ int id; int age; int yuwen; int shuxue; }; bool cmp(student x,student y){ if(x.age!=y.age)return x.age<y.age; else if(x.yuwen!=y.yuwen)return x.yuwen>y.yuwen; else if(x.shuxue!=y.shuxue)return x.shuxue>y.shuxue; else return x.id>y.id; } int main(){ student x[100]; for(int i=1;i<=6;i++){ cin>>x[i].age>>x[i].yuwen>>x[i].shuxue; x[i].id=i; } sort(x+1,x+6+1,cmp); for(int i=1;i<=6;i++){ cout<<x[i].id<<" "<<x[i].age<<" "<<x[i].yuwen<<" "<<x[i].shuxue<<'\n'; } return 0; }
using namespace std; int A[100]; int main() { int n; cin>>n;//1 2 3 3 3 4 5 6 for(int i=1; i<=n; i++) { cin>>A[i]; } int L=1,R=n; // L R的初始值 是你的答案可能的区间 int m=3; //假设m就是我们要找的目标数字 while(L<R) { int mid=(L+R)/2;//取一半,来划分 if(A[mid]>=m) { // [L mid R] 为了寻找更靠前的解 区间应该缩小 R=mid R=mid; } else { L=mid+1;//A[mid]<m } } if(A[R]==m)cout<<R; else cout<<"无解"; return 0; } // 寻找最小的可能答案 有N 1e5 个糍粑 每个糍粑宽度是A[i] 两个不同的糍粑可以叠在一起 但 要满足 上面的糍粑至多只能为另一个糍粑的一半 题目想问,有多少种不同的糍粑叠起来的方案 暴力 int ans=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ //假设i糍粑是上面的,j糍粑是下面的 if(A[i]*2<=A[j])ans++; } } n*n=1e10 先对糍粑排序 从小到大 对于i糍粑,如果我知道了它合适的糍粑的第一个位置j 因为所有糍粑的大小已经排序了, [j,n] 这些糍粑 是不是都可以跟i 叠起来 问题变为: 对于每个糍粑i 寻找第一个>=2*A[i] 的位置 糍粑不是排序 二分一次 Nlog(N) 1e5*20 2e6 [i+1 N] int L=i+1,R=N; while(L<R){ int mid=(L+R)/2; if(A[mid]>=2*A[i]){ // [L mid R] R=mid; } else{// 意味着A[mid]<2*A[i] L=mid+1; } } if(A[R]>=2*A[i]) { //[R~N] ans+=N-R+1; } ``` `
-
Recent Activities