8/14牛客比赛部分题解

在这里插入图片描述

这道题目有两个地方需要注意到:
	1.这个数字可能很大,所以需要是字符串输出,注意前导0和数字0
	2.这个字符串有空格。
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
const int maxn = 1e5 + 10;
const int mod=1000000007;
typedef long long ll;
char s[maxn];
ll a[100000];
int main(){
  while (gets(s))
    {
        int len = strlen(s);
        for(int i=0;i<len;i++)
        {
              if(s[i]>= '0' && s[i]<= '9')
              {
                   while(s[i]=='0') i++;
                   bool flag = false;
                   while(s[i]>='0'&&s[i]<='9')
                   {
                         cout<<s[i];
                         ++i;
                         flag = true;
                   }
                   if(!flag) cout<<'0';
                   cout<<" ";
              }

        }
        cout<<endl;
    }
    return 0;
}

在这里插入图片描述

这道题目:
	位运算只会导数字变小
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int maxnum = 0,tmp;
    int cases;
    cin>>cases;
    while(cases--)
    {
        maxnum = 0;
        int num;
        cin>>num;
        for(int i = 0;i<num;i++)
        {cin>>tmp;maxnum = max(tmp,maxnum);}
        cout<<maxnum<<endl;
    }
}

在这里插入图片描述

这个模拟一下:
	1.自己去算一下就知道:三的倍数会导致怎么选都是输
#include<iostream>
using namespace std;
int main()
{
    int cases;
    cin>>cases;
    while(cases--)
    {
        int tmp;
        cin>>tmp;
        if(tmp%3==0)
            cout<<"Frame"<<endl;
        else
          cout<<"Alan"<<endl;
    }
}

在这里插入图片描述

DP法:
	1.我们首先设置dp[10005][2],dp[x][0]代表变为0所需要的次数,dp[x][1]变为1的次数
	2.如果是1,那么我们就是在全为0次数里面只用1次变为0
	  全为1那么就是全为1次数里面用0次全变为0
	3.如果是0,那么我们是全为0次数里面不变
	  在全为1的里面用一次就能变为0
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[1000005][2];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	memset(dp, 0, sizeof(dp));
	int cases;
	cin >> cases;
	int tmp = 0, i = 1;
	while (cases--)
	{
		cin >> tmp;
		if (tmp == 1)
		{
			dp[i][0] = min(dp[i - 1][0] + 1, dp[i - 1][1] + 1);
			dp[i][1] = min(dp[i - 1][1], dp[i - 1][0] + 1);
		}
		else
		{
			dp[i][0] = min(dp[i - 1][0], dp[i - 1][1] + 1);
			dp[i][1] = min(dp[i - 1][1] + 1, dp[i - 1][0] + 1);
		}
		i++;
	}
	cout << min(dp[i - 1][0], dp[i - 1][1]) << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值