第一题 
思路 
一开始 -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 条评论

目前还没有评论...