[HDU 多校训练] Equal Sentences (2020第四场1005)

5 篇文章 0 订阅
2 篇文章 0 订阅

HDU Equal Sentences (2020杭电多校训练第四场1005)

HDU Equal Sentences
在这里插入图片描述
根据题目,不难发现有一下的规律:
第i个和前一个比较,如果相等,就赋值为i-1的值
否则就dp[i-1]+dp[i-2]+1
存到第i就是有dp[i]+1个解

if(a[i]==a[i-1]) 
	dp[i]=dp[i-1];
else
	dp[i]=(dp[i-1]+dp[i-2]+1)%mod;

这边在多说一句,string的格式还是需要用cin去读取,scanf好像不行…
其他的废话不多说直接上AC代码

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)	
#define T int t ;cin >> t;while(t--)
using namespace std ;
typedef long long ll;
typedef unsigned long long ull;
inline ll gcd(ll a,ll b){return b == 0? a:gcd(b, a % b);}
const int maxn = 1e5+10;
const int INF = 0x3f3f3f3f;
const double eps = 1e-11;
const ll mod = 1e9 + 7;
ll n ; 
string a[maxn] ;
ll dp[maxn] ;
int main()
{
	T
	{
		cin >> n ;
		ll ans = 0 ;
		memset(dp,0,sizeof(dp)) ;   //清空dp数组
		for(int i = 1 ; i <= n ; i++)
		{
			cin >> a[i] ;
		}
		dp[0] =0 ;dp[1] = 0 ;
		for(int i=2;i<=n;i++)
		{
			if(a[i]==a[i-1]) 
				dp[i]=dp[i-1];      
			else
				dp[i]=(dp[i-1]+dp[i-2]+1)%mod;
		}
		printf("%lld\n",dp[n]+1) ;
		
	}
	return 0 ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值