8月集训 DAY7

统计单词数(简单语法——string)

错误原因

思路

现将原文章全部转换成大写或小写 再将单词全部转换成大写或小写 让前后都加上空格(这样就不会找到单词中的单词)然后再find()如果是-1 就输出-1 否则就一直找 每找一个cnt++ 最后输出cnt 和 第一个位置

(本题太水沝淼了)

代码

#include<bits/stdc++.h>
using namespace std;
int cnt,xb,xb2;
int main()
{
	freopen("cal.in","r",stdin);
	freopen("cal.out","w",stdout);
	string s,s2;
	getline(cin,s2);
	getline(cin,s);
	for(int i=0;i<s.size();i++)
	{
		if(s[i]<='Z'&&s[i]>='A') s[i]=s[i]+32;
	}
	for(int i=0;i<s2.size();i++)
	{
		if(s2[i]<='Z'&&s2[i]>='A') s2[i]=s2[i]+32;
	}
	s=" "+s+" ";
	s2=" "+s2+" ";
	if(int(s.find(s2))==-1) cout<<-1;
	else
	{
		cnt++;
		xb=int(s.find(s2));
		xb2=xb;
		while(xb<s.size())
		{
			if(int(s.find(s2,xb+1))==-1) break;
			xb=int(s.find(s2,xb+1));
			cnt++;
		}
		cout<<cnt<<" "<<xb2;
	}
}

瑞士轮(模拟——归并优化)

超时的原因

写的暴力

代码

#include<bits/stdc++.h>
using namespace std;
int n,r,q;
struct man
{
	int num;
	int fenshu;
	int shili;
};
man a[200010],win[100010],lost[100010];
bool cmp(man b,man c)
{
	if(b.fenshu!=c.fenshu) return b.fenshu>c.fenshu;
	else return b.num<c.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].fenshu;
		a[i].num=i;
	}
	for(int i=1;i<=2*n;i++) cin>>a[i].shili;
	sort(a+1,a+2*n+1,cmp);
	while (r --)
	{
		int s1=0,s2=0;
		s1=0,s2=0;
		for(int i=1;i+1<=2*n;i=i+2)
		{
			if(a[i].shili>a[i+1].shili) 
			{
  				a[i].fenshu++;
				win[++s1].num=a[i].num;
				win[s1].shili=a[i].shili;
				win[s1].fenshu=a[i].fenshu;
				lost[++s2].num=a[i+1].num;
				lost[s2].shili=a[i+1].shili;
				lost[s2].fenshu=a[i+1].fenshu;
			}
			else 
			{
				a[i+1].fenshu++;
				win[++s1].num=a[i+1].num;
				win[s1].shili=a[i+1].shili;
				win[s1].fenshu=a[i+1].fenshu;
				lost[++s2].num=a[i].num;
				lost[s2].shili=a[i].shili;
				lost[s2].fenshu=a[i].fenshu;
			}
		}
		int j1=1,j2=1,oip=1;
		j1=1,j2=1,oip=1;
		while(j1<=n&&j2<=n)
		{
			if(cmp(win[j1],lost[j2]))
			{
				a[oip].num=win[j1].num;
				a[oip].fenshu=win[j1].fenshu;
				a[oip].shili=win[j1].shili;
				j1++,oip++;
			}
			else
			{
				a[oip].num=lost[j2].num;
				a[oip].fenshu=lost[j2].fenshu;
				a[oip].shili=lost[j2].shili;
				j2++,oip++;
			}
		}
		while(j1<=n)
		{
			a[oip].num=win[j1].num;
			a[oip].fenshu=win[j1].fenshu;
			a[oip++].shili=win[j1++].shili;
		}
		while(j2<=n) 
		{
			a[oip].num=lost[j2].num;
			a[oip].fenshu=lost[j2].fenshu;
			a[oip++].shili=lost[j2++].shili;
		}
	}
	cout<<a[q].num;
}