松哥有许多困惑

松哥的困惑

描述
都到世界末日了,松哥都没找到女朋友,因此松哥感到很困惑.没想到到了世界末日都没人喜欢我.松哥一生气就发布了征友启事,第二天,一共有n个人报名应征松哥女友.松哥对女友的要求有三点,第一点,名字必须有三个字,第二点,名字中要带Li,第三点名字中要带Ting.松哥希望你能从n个人中.松哥决定选取一人并和她约会.你能找到是谁嘛?
输入
多组测试数据.
每组测试数据的第一行是一个正整数(n<=100).
接下来n行分别有n个名字.每个名字不超过20个字符.
名字的格式为:名+姓,且首字母大写,比如沈利松就叫LiSongShen.
输出
对于每组数据输出与松哥约会的名字.
输入数据保证只有一个人满足松哥的要求.
输入样例 1
2
LiSongShen
LiTingXu
输出样例 1
LiTingXu

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

int main()
{
    int n,cont;
    string s;
    while(cin>>n)
    {
        while(n--)
        {
            cin>>s;
            cont=0;
            for(int i=0; i<s.length(); i++)
            {
                if(s[i]>='A'&&s[i]<='Z')
                    cont++;
            }
            if(cont!=3)
                continue;
            if(s.find("Li")<s.length()&&s.find("Ting")<s.length())
            {
                for(int i=0; i<s.length(); i++)
                    cout<<s[i];
                cout<<endl;
            }
        }
    }
    return 0;
}

松哥的困惑II

描述
松哥历尽千辛万苦终于找到女朋友了,但是一星期后又回到了单身的日子,松哥很生气后果很严重,所以松哥决定大吃一顿,但是由于松哥很胖,他要吃m千克的东西才会饱,松哥喜欢吃n样东西,每份东西有ai千克,需要bi元钱,只有ci份.松哥希望知道最少需要花多少钱才能使他吃饱,你能告诉他嘛.东西只能一份一份买,不能只买半份.
输入
多组测试数据.
每组测试数据的第一行包含两个正整数n,m(n<=100,m<=10000).
第二行有n个正整数a1,a2,a3,a4…an-1.(ai<=10000)
第三行有n个正整数b1,b2,b3,b4…bn-1.(bi<=100)
第四行有n个正整数c1,c2,c3,c4…cn-1.(ci<=100)
输出
对于每组数据输出能使松哥吃饱所需要花费最少的钱.如果松哥吃完了所有的东西还不能吃饱,请输出“impossible”.
输入样例 1
3 1
1 1 2
1 2 1
1 1 1
3 100
1 1 2
1 2 1
1 1 1
2 2
2 1000
2 10
2 2
2 5
2 1000
2 10
2 2
输出样例 1
1
Impossible
2
10

#include <bits/stdc++.h>

using namespace std;
const int maxn=11000;
int main()
{
    int m,n;
    int a[maxn],b[maxn],c[maxn],s[maxn];
    while(cin>>n>>m)
    {
        int money=0,weight=0;
        for (int i = 0; i < n; i++)
            cin>>a[i];//每份食物的重量
        for (int i = 0; i < n; i++)
            cin>>b[i];//每份食物的价钱
        for (int i = 0; i < n; i++)
        {
            cin>>c[i];//每份食物的数量
            money+=b[i]*c[i];//全部吃完的价钱
            weight+=c[i]*a[i];//全部吃完的重量
        }
        if(weight<m)
            cout << "Impossible" << endl;
        else
        {
            for(int i=1;i<=m;i++)
                s[i]=money;
            s[0]=0;
            for (int i=0;i<n;i++)
            {
                for (int j=m-1;j>=0;j--)
                {
                    if(s[j]!=money)//当还没有到达全部吃完的价钱
                    {
                        for(int k=1;k<=c[i];k++)
                        {
                            if(j+k*a[i]>=m)//当前的之前时刻已吃的千克数+当前选择吃进去的千克数 已经能满足吃饱的条件的话
                                s[m]=min(s[m],s[j]+k*b[i]);//选择花费钱最少的情况
                            else
                                s[j+k*a[i]] = min(s[j+k*a[i]] ,s[j]+k*b[i]);//没吃饱的时候,选择当前时刻吃和不吃时花费的钱的最少的情况
                        }
                    }
                }
            }
            cout << s[m] << endl;
        }
    }
    return 0;
}


松哥的困惑III

描述
松哥大吃一顿后,他的体重随着时间的增长而不断增长,直到有一天他的体重达到了n吨,他意识到他不能再这样下去了,所以他居然决定减肥。他每天上午跑步能够减少a吨,但是晚上吃饭又增加了b吨。松哥想要直到第几天后他的体重第一次小于m吨,你能告诉他嘛?
输入
多组测试数据。
每组测试数据包含4个正整数n,m,a,b。
所有的整数大小均不大于10000。
输出
对于每组测试数据,输出一个整数代表松哥第几天后他的体重第一次小于m吨。
如果不可能输出”impossible”.
输入样例 1
5 1 3 1
输出样例 1
2

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,a,b,m;
    while(~scanf("%d%d%d%d",&n,&m,&a,&b))
    {
        int day=0;
        while(n>=m)
        {
            day++;
            n=n-a;
            if(n<m)
            {
                break;
            }
            if(b>=a)
            {
                day=-1;
                break;
            }
            n+=b;
        }
        if(day>=0)
            printf("%d\n",day);
        else
            printf("impossible\n");
    }
    return 0;
}

松哥的困惑IV

描述
松哥有次突发奇想,决定回高中再上高中数学课,数学老师提了这样一个问题:有一个分段函数T(0,n)=n(n>0),T(k,n)=T(k-1,1)+T(k-1,2)+…+T(k-1,n)(k>0,n>0).第一天数学老师问他,松松对于T(1,1)你怎么看?第二天数学老师问他,松松对于T(2,2)你怎么看?第三天数学老师问他,松松对于T(3,3)你怎么看?……松哥怒了,松哥决定一次把所有函数值全部算出来,但是由于他智商有限,所以他想请求你的帮助.

输入
多组测试数据.
每组测试数据包含一个正整数k,n.(0<k,n<1010)

输出
对于每组测试数据,输出T(k,n)mod 100007.

输入样例 1
0 2
1 3
2 5
输出样例 1
2
6
35

#include <bits/stdc++.h>

using namespace std;

int T[1015][1015];
int main()
{
    int k,n;
    for(int j=1; j<=1010; j++)
    {
        T[0][j]=j;
        T[j][1]=1;
    }
    for(int i=1; i<=1010; i++)
    {
        for(int j=2; j<=1010; j++)
        {
            T[i][j]=(T[i-1][j]+T[i][j-1])%100007;
        }
    }
    while(cin>>k>>n)
    {
        cout<<T[k][n]<<endl;
    }
    return 0;
}

松哥的困惑V

描述
松哥上了数学课之后,觉得自己智力实在有所不足,所以他决定找人辩论,以提高自己的智力,已知松哥目前的智力是m,他决定和n个人辩论,如果他对手的智力高于他,松哥的智力能够提升2,否则只能提升1,假设松哥能够取得所有的胜利,请问他完成n场辩论后能够得到的最高智力是多少?
输入
多组测试数据.
每组测试数据的第一行包含两个正整数m,n.(m<=100,n<=10^5)
第二行为n个不大于100的整数,代表与他辩论人的智力.
输出
对于每组测试数据,他完成n场辩论后,能取得的最大的智力.
输入样例 1
91 5
88 90 92 94 98
输出样例 1
99

#include <iostream>
#include <algorithm>
using namespace std;
int a[100001];
int main()
{
    int m,n;
    while(cin>>m>>n)
    {
        int small=0,x,k=0;
        for(int i=0;i<n;i++)
        {
            cin>>x;
            if(x<=m)
                small++;
            else
                a[k++]=x;
        }
        sort(a,a+k);
        for(int i=0;i<k;i++)
        {
            if(a[i]>m)
                m+=2;
            else
                small++;//此处不可直接用m++
        }
        m+=small;
        cout<<m<<endl;

    }

    return 0;
}

又是比智力

描述
松哥上了数学课之后,觉得自己智力实在有所不足,所以他决定找人辩论,以提高自己的智力,已知松哥目前的智力是m,他决定和n个人辩论,如果他对手的智力低于他,松哥的智力能够提升2,否则只能提升1,假设松哥能够取得所有的胜利,请问他完成n场辩论后能够得到的最高智力是多少?
输入
多组测试数据.
每组测试数据的第一行包含两个正整数m,n.(m<=100,n<=10^5)
第二行为n个不大于100的整数,代表与他辩论人的智力.
输出
对于每组测试数据,他完成n场辩论后,能取得的最大的智力.
输入样例 1
91 5
88 90 92 94 98
输出样例 1
101

#include <iostream>
#include <algorithm>
using namespace std;
int pa[200000];
int main()
{
    int m,n,a;
    while(cin>>m>>n)
    {
        for(int i=0;i<n;i++)
            cin>>pa[i];
        sort(pa,pa+n);
        for(int i=0;i<n;i++)
        {
            if(m>pa[i])
                m+=2;
            else
            {i--;n--;m++;}
        }
        cout<<m<<endl;
    }
    return 0;
}

松哥的困惑VII

描述
有一天dp小王子偷偷摸摸找到松哥问他:已知n=o*2^p,已知n你能求出o和p嘛?松哥笑了笑告诉他,明天再告诉你。其实松哥并不知道答案,所以他想让你告诉他答案,然后他在把答案告诉dp小王子,松哥发现有可以有很多组o和p,所以决定只告诉他p最大的一组,O(∩_∩)O哈哈~
输入
多组测试数据.
每组测试数据有一个整数n.
n在int范围内.
输出
对于每组测试数据,输出满足条件的o和p,p尽可能大
输入样例 1
24
输出样例 1
3 3

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n,p;
    while(cin>>n)
    {
        p=0;
        while(n!=0)
        {
            if(n%2!=0)
                break;
            else
            {
                n/=2;
                p++;
            }
        }
        cout<<n<<" "<<p<<endl;
    }
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值