四道好题分享(看似简单,但是棘手)

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 四道好题分享(看似简单,但是棘手),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

字符串丝带 (nowcoder.com) 

四道好题分享(看似简单,但是棘手) 

#include<bits/stdc++.h>
using namespace std;
const int N = 1000010;
int main()
{
    char str[N];
    int cnt[N];
    int ind[N];
    int n,m;
    scanf("%d %d",&n,&m);
    scanf("%s",str+1);
    for(int i = 1 ; i <= n ;i++){
        cnt[str[i] - 'a']++;
        ind[i] =cnt[str[i] - 'a'];
    }
    int x;
    while(m--) {
        scanf("%d",&x);
        printf("%d\n",ind[x]);
    }
    return 0;
}

 

 [NOIP2017]图书管理员 (nowcoder.com)四道好题分享(看似简单,但是棘手)

 四道好题分享(看似简单,但是棘手)

 排序——寻找min,如果找到了,立即break

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n,q;
    cin>>n>>q;
    long long a[n+1];
    for(int i=1;i<=n;i++)
	{
        cin>>a[i];
    }
    sort(a+1,a+1+n);//排序!!!
    for(int i=1;i<=q;i++)
	{
        long long len,x;
        cin>>len>>x;
        long long y=pow(10,len);//妙!!!
        for(int j=1;j<=n;j++)
		{
            if(a[j]%y==x)
			{
                cout<<a[j]<<endl;
                break;
            }
            if(j==n)
			cout<<-1<<endl;
        }
    }
    return 0;
}

 或者

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,q,len;
	vector<string> ve;
	vector<int> nt;
	string s;
	cin>>n>>q;
	while(n--)
	{
		cin>>len;
		nt.push_back(len);
	}
	sort(nt.begin(),nt.end());//排序!!!

	for(auto i:nt)//遍历nt容器
	{
		ve.push_back(to_string(i));//to_string 把i变成字符串
	}
	while(q--)
	{
		cin>>len>>s;
		int flag=0;
		for(auto i:ve)
		{
			int x=i.size()-len;
			if(x<0)
			{
				continue;
			}
			if(i.substr(x,len)==s)//截取字符串
			{
				flag=1;
				s=i;
				break;
			}
		}
		if(flag)
		{
			cout<<s<<endl;
		}
		else
		{
			cout<<"-1"<<endl;
		}
	}
}

[NOIP2007]纪念品分组 (nowcoder.com)

四道好题分享(看似简单,但是棘手)

四道好题分享(看似简单,但是棘手)

#include <iostream>
#include<algorithm>
using namespace std;
int n,w;
const int N=10010;
int p[N];
int main()
{
    cin>>w>>n;
    for(int i=0 ;i < n;i ++ ) cin>>p[i];
    
    sort(p,p+n);//注意已经排过序了
    
	int res =0;
    int l=0;
    for(int i=n-1;i >= l;i -- )
    {
        if(p[i] + p[l] <= w ) l ++;
        res ++ ;

    }

    cout<<res<<endl;

    return 0;
}

拼数 (nowcoder.com)

四道好题分享(看似简单,但是棘手)

 🍔🍔🍔string类型的按ASCII比较大小

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

bool cmp (string a, string b)
{
    return a + b > b + a;
}
int main()
{
    string s[21];
    int n;
    cin >> n;
    for(int i = 1; i <= n; i ++ ){
        cin >> s[i];
    }
    sort(s + 1, s + 1 + n, cmp);
    for(int i = 1; i <= n; i ++ ){
        cout << s[i];
    }
    
}

四道好题分享(看似简单,但是棘手)

四道好题分享(看似简单,但是棘手)

如果Sl!=Sl+i,继续进行

一旦Sl=Sl+1,立刻截至,即使后面有Sl!=Sl+i也不能进行 

#include <stdio.h>
int main(void) {
  int n;
  char s[5000];
  scanf("%d", &n);
  scanf("%s", s);
  for (int i = 1; i < n; i++)
  {
  	int l = 0;//关键点
    while (l + i != n && s[l] != s[l+i])
    {
    	l++;
	}
    printf("%d\n", l);
  }
  return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131424.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!