- C++
8月Day03 解析
- @ 2024-8-7 15:45:09
第一题
思路
一开始 -1
找起来 找到了
是一个单词前面和后面都是空格
string s = " "+s+" ";
string::npos
#include <bits/stdc++.h>
using namespace std;
string s1, s2, s3;
int main() {
// 假设 s1 是 abcdecde,s2 是 cde,s3 是 klm
cin >> s1 >> s2 >> s3;
cout << s1.find(s2) << '\n'; // 输出为 2,因为第一次出现的位置是从 2 开始
cout << s1.find(s3) << '\n'; // 是一个很大的数字,因为返回的是无符号整型,转为int后其实是-1
int flag = s1.find(s3);
cout << flag << '\n'; // -1
return 0;
}
string s = "abcdefg", s1, s2;
s1 = s.substr(2); // 从下标2开始,截取后面的所有字符,即cdefg
s2 = s.substr(3, 2); // 从下标3开始,截取两个字符,即de
To
to be or not to be is a question
先去前后添加空格 找到了 就存位置 然后截取字符串 然后再找
第一题正确代码 循环查找
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
freopen("cal.in", "r", stdin);
freopen("cal.out", "w", stdout);
string s, l;
getline(cin, s);
getline(cin, l);
for (int i = 0; i < s.size(); i++)
s[i] = tolower(s[i]);
for (int i = 0; i < l.size(); i++)
l[i] = tolower(l[i]);
int cnt = 0, k = -1;
for (int i = 0; i < l.size(); i++)
{
if (l[i] == ' ') continue;
int j = i + 1;
while (j < l.size() && l[j] != ' ') j++;
if (s == l.substr(i, j-i))
{
cnt ++;
if (k == -1) k = i; // 记录索引
}
i = j; //i跳到j的位置
}
if (cnt == 0) cout << "-1" << endl;
else cout << cnt << ' ' << k << endl;
return 0;
}
//归并排序
void merge_sort(int q[], int l, int r) {
if (l >= r) return; // 只有一个元素
int mid = (l + r) / 2;
merge_sort(q, l, mid);
merge_sort(q, mid+1, r);
// 归并操作
int k = 0, i = l, j = mid+1;
while (i <= mid && j <= r) {
if (q[i] <= q[j]) {
temp[k] = q[i];
k++; i++;
}
else {
temp[k] = q[j];
k++; j++;
}
}
while (i <= mid) temp[k++] = q[i++];
while (j <= r) temp[k++] = q[j++];
for(int i = l, j = 0; i <= r; i++, j++) q[i] = temp[j];
}
//60分代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
struct P
{
long long fen;
long long shi;
long long bian;
}a[N];
bool cmp(P a,P b)
{
if(a.fen!=b.fen) return a.fen>b.fen;
else return a.bian<b.bian;
}
int main()
{
freopen("ruishi.in","r",stdin);
freopen("ruishi.out","w",stdout);
long long n,r,q;
cin>>n>>r>>q;
n*=2;
for(int i=1;i<=n;i++) cin>>a[i].fen;
for(int i=1;i<=n;i++) cin>>a[i].shi;
for(int i=1;i<=n;i++) a[i].bian=i;
sort(a+1,a+n+1,cmp);
while(r--)
{
for(int i=1,j=2;j<=n;i+=2,j+=2)
{
if(a[i].shi>a[j].shi) a[i].fen++;
else if(a[i].shi<a[j].shi) a[j].fen++;
}
sort(a+1,a+1+n,cmp);
}
cout<<a[q].bian;
return 0;
}
//第二题满分代码
#include <bits/stdc++.h>
using namespace std;
struct node{
int gr;
int num;
};
bool cmp(node a,node b){
if(a.gr == b.gr){
return a.num < b.num;
}
return a.gr > b.gr;
}
node a[200010],A[100010],B[100010];
int n,r,q;
int w[200010];
void px(){
int i=1,j=1,k=1;
while(i<=n &&j<=n){
if(A[i].gr > B[j].gr ||(A[i].gr == B[j].gr&&A[i].num < B[j].num)){
a[k].gr = A[i].gr;
a[k++].num = A[i++].num;
}else{
a[k].gr = B[j].gr;
a[k++].num = B[j++].num;
}
}
while(i<=n){
a[k].gr = A[i].gr;
a[k++].num = A[i++].num;
}
while(j<=n){
a[k].gr = B[j].gr;
a[k++].num = B[j++].num;
}
}
int main(){
freopen("ruishi.in","r",stdin);
freopen("ruishi.out","w",stdout);
cin>>n>>r>>q;
for(int i=1;i<=2*n;i++){
cin>>a[i].gr;
a[i].num = i;
}
for(int i=1;i<=2*n;i++){
cin>>w[i];
}
sort(a+1,a+1+2*n,cmp);
for(int k=1;k<=r;k++){
int tt=1;
for(int i=1;i<2*n;i+=2){
// cout<<w[a[i].num]<<" "<<endl;
if(w[a[i].num]>w[a[i+1].num]){
A[tt].gr = a[i].gr+1;
A[tt].num = a[i].num;
B[tt].gr = a[i+1].gr;
B[tt].num = a[i+1].num;
tt++;
}else{
A[tt].gr = a[i+1].gr+1;
A[tt].num = a[i+1].num;
B[tt].gr = a[i].gr;
B[tt].num = a[i].num;
tt++;
}
}
px();
}
cout<<a[q].num<<endl;
return 0;
}
0 条评论
目前还没有评论...