集训整理题目集

一、第一道题目就是每次给你2n+2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字并升序输出。但是这个数据范围比较大,达到26位,所以用常规的数据存储是做不到的,所以我们可以采用string类型来做,问题就可以简化不少,因为string可以直接判等,排序后寻找关系就可以啦!
代码:

#include<bits/stdc++.h>
using namespace std;
string a[50010],b;
int l=0,f=0;
int main()
{
 while(cin>>b)
 {
  a[l++]=b;
 }
 sort(a,a+l);26wei1
 for(int i=0;i<l;i++)
 {
  if(a[i]!=a[i+1]&&a[i]!=a[i-1])
  {
   if(!f)
   {
    cout<<a[i]<<" ";
    f=1;
   }
   else cout<<a[i]<<endl;
  }
 }
 return 0;
}

二、这是一道签到题,题目的意思就是有一条河,河中有n块石头,其中有一块石头松动,不可走,即第k块,现在从河的一边只能通过走石头到达对岸,每一步可以跨越 1 ~ 3 个石头。请问一共有多少种走法。思路当然就是用循环或者递归啦,找到方程很关键。根据画图找到关系dp[i]=dp[i-1]+dp[i-2]+dp[i-3],并且dp[k]=0。在这里插入图片描述
代码如下:

#include<bits/stdc++.h>
using namespace std;
#define mod 998244353
long long dp[1000100];
int main()
{
 int n,k;
 while(cin>>n>>k)
 {
  dp[1]=1;
  dp[2]=2; 
  dp[3]=4;
  dp[k]=0;
  for(int i=4;i<=n+2;i++)
  {
   dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
  }
  cout<<dp[n]%mod<<endl;
 }
 return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值