周日上午-东塘404-罗

· · 个人记录

T669129 求第 k 小的数

新知识

//关闭同步流
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//scanf(),printf();
//c++中的数组一般范内:3*10^7

思路

先定一个数组:a[5000010],再定两个变量:n,m,然后开一个同步流,输入n,m,再来个for循环:for(int i=1;i<=n;i++){cin>>a[i];}然后来个sort排序:sort(a+1,a+1+n);最后输出a[m+1];

代码

#include<bits/stdc++.h>
using namespace std;
int a[5000010],n,m;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+1+n);
    cout<<a[m+1];
    return 0;
}

[GESP202409 四级] 区间排序

思路

先定一个整数变量:n,在定一个数组:a[110];输入n,for循环:

for(int i=1;i<=n;i++){
  cin>>a[i];
}

int q,在输入q,最后输入一个for循环和while循环:

while(q--){
    int l,r;
    cin>>l>>r;
    sort(a+l,a+r+1);
}
for(int i=1;i<=n;i++){
    cout<<a[i]<<' ';
}

代码

#include<bits/stdc++.h>
using namespace std;
int n;
int a[110];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        }
    int q;
    cin>>q;
    while(q--){
        int l,r;
        cin>>l>>r;
        sort(a+l,a+r+1);
    }
    for(int i=1;i<=n;i++){
        cout<<a[i]<<' ';
    }
    return 0;
}

B4289 [蓝桥杯青少年组省赛 2022] 字母组合

思路

先定一个char变量:a[105],再定一个整数变量n,在输入n,然后用for循环输入数组,排个序sort(a+1,a+1+n);最后来个for循环输出a数组。

代码

#include<bits/stdc++.h>
using namespace std;
char a[105];
int n;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+1+n);
    for(int i=1;i<=n;i++){
        cout<<a[i];
    }
    return 0;
}

P4414 [COCI 2006/2007 #2] ABC

思路

先定一个整数变量:a[10];在输入a[1],a[2],a[3],然后来个sort排序:sort(a+1,a+1+3);再定一个字符串s,然后len=s.size();最后来个for训环:

for(int i=0;i<=len-1;i++){
  if(s[i]=='A'){
    cout<<a[1]<<' ';
    }
  if(s[i]=='B'){
        cout<<a[2]<<' ';
  }
  if(s[i]=='C'){
    cout<<a[3]<<' ';
  }
} 

代码

#include<bits/stdc++.h>
using namespace std;
int a[10];
int main(){
    cin>>a[1]>>a[2]>>a[3];
        sort(a+1,a+1+3);
    string s;
    cin>>s;
    int len=s.size();
    for(int i=0;i<=len-1;i++){
        if(s[i]=='A'){
            cout<<a[1]<<' ';
        }
        if(s[i]=='B'){
            cout<<a[2]<<' ';
        }
        if(s[i]=='C'){
            cout<<a[3]<<' ';
        }
    } 
    return 0;
}

U522962 单词排序

思路

先定两个变量string s,int n,再定一个数组a[110],再来一个while(cin):while(cin>>s){n++;a[n]=s;}在排一个序:sort(a+1,a+1+n);来一个for循环:

for(int i=1;i<=n;i++){
    if(a[i]!=a[i-1]){
        cout<<a[i]<<endl;
    }
}

代码

    #include<bits/stdc++.h>
using namespace std;
string a[110],s;
int n;
int main(){
    while(cin>>s){
        n++;
        a[n]=s;
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++){
        if(a[i]!=a[i-1]){
            cout<<a[i]<<endl;
        }
    }
    return 0;
}   

P2676 [USACO07DEC] Bookshelf B

思路

先定一个数组:h[20005],再来一个bool函数:

bool cmp(int a,int b){
    return a>b;
}

再定两个变量:n,b,在输入n,b,然后来个for循环来输入h数组:for(int i=1;i<=n;i++){cin>>h[i];}然后排个序:sort(h+1,h+n+1,cmp);然后定两个变量:ans=0,sum=0;再来一个for循环:

for(int i=1;i<=n;i++){
    sum+=h[i];
    ans++;
    if(sum>=b){
        break;
    }   
}

最后输出ans;

代码

#include<bits/stdc++.h>
using namespace std;
int h[20005];
bool cmp(int a,int b){
    return a>b;
}
int main(){
    int n,b;
    cin>>n>>b;
    for(int i=1;i<=n;i++){
        cin>>h[i];
    }
    sort(h+1,h+n+1,cmp);
    int ans=0,sum=0;
    for(int i=1;i<=n;i++){
        sum+=h[i];
        ans++;
        if(sum>=b){
            break;
        }

    }
    cout<<ans;
    return 0;
}