Codeforces Round #427 (Div. 2)C. Star sky 暴力D. Palindromic characteristics

C. Star sky

题意:有很多个星星,已知星星的初始闪光值s,和坐标,闪光值的变化为s,s+1...c,0,1,2,...c,0,1,2循环

会有星星坐标重叠的情况,c的范围很小,而变化时间对(c+1)取膜后同余的情况相同,可以先把所有点在不同时间的预处理出来,然后1e9的暴力查询就行了

#include<bits/stdc++.h>
#define eps 1e-9
#define PI 3.141592653589793
#define bs 1000000007
#define bsize 256
#define MEM(a) memset(a,0,sizeof(a))
typedef long long ll;
using namespace std;
int ans[15][200][200];
int n,q;
int main()
{
	int t,c,i,j,x,y,s,t1,x1,x2,y1,y2,k;
	cin>>n>>q>>c;
	for(i=0;i<n;i++)
	{
		scanf("%d %d %d",&x,&y,&s);
		for(t=0;t<=c;t++)
		ans[t][x][y]+=(s+t)%(c+1);	
	}
	while(q--)
	{
		scanf("%d %d %d %d %d",&t1,&x1,&y1,&x2,&y2);
		t1%=(c+1);
		int now=0;
		for(i=x1;i<=x2;i++)
		{
			for(j=y1;j<=y2;j++)
			{
				now+=ans[t1][i][j];			
			}
		}
		printf("%d\n",now);	
	}
	return 0;	
}


D. Palindromic characteristics

D题就是暴力。。。。没想到太好的暴力思路,好气。。。不专心写。。。。有点像区间dp。。。

会发现 k-palindrome无论k是多少都一定是一个回文串,当一个串是回文串时,只要他左半部分也是回文串,右半部分一定也是和左半部分一样的回文串

字符串长度并不是很长,先把所有的回文串都标记出来,然后类似区间dp的搞一搞就可以了

#include<bits/stdc++.h>
#define eps 1e-9
#define PI 3.141592653589793
#define bs 1000000007
#define bsize 256
#define MEM(a) memset(a,0,sizeof(a))
typedef long long ll;
using namespace std;
char ch[5005];
int dp1[5005][5005],dp[5005][5005],ans[5005]; 
int main()
{
	cin>>ch;
	int i,j,len=strlen(ch);
	for(i=0;i<len;i++)
	dp1[i][i]=dp[i][i]=1;
	for(i=1;i<len;i++)
	{
		for(j=0;j+i<len;j++)
		{
			int k=j+i;
			if(ch[j]==ch[k]&&(i==1||dp1[j+1][k-1]))
			{
				dp[j][k]=dp1[j][k]=1;		
			}
		}
	}
	
	for(i=1;i<len;i++)
	{
		for(j=0;j+i<len;j++)
		{
	
			int k=j+i;
		//	cout<<j<<" "<<k<<" "<<dp1[j][k]<<endl;
			if(dp1[j][k])
			{
				int l=(i+1)/2;
		//		cout<<l<<endl;
				if(dp1[j][j+l-1])
				{
					dp[j][k]=dp[j][j+l-1]+1;	
				}
			}
		}
	}
	for(i=0;i<len;i++)
	{
		for(j=i;j<len;j++)
		ans[dp[i][j]]++;
	}
	for(i=len;i>=2;i--)
	{
		ans[i-1]+=ans[i];
	}
	for(i=1;i<=len;i++)
	cout<<ans[i]<<" ";
	cout<<endl;
	return 0;
 }


错过了最佳的上分机会。。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值