您的位置:首页 > 其它

SHU 2013 暑期集训(7-14)解题报告

2013-07-14 22:35 471 查看

Problem A: 神奇的fans

Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 84 Solved: 30
[Submit][Status][Web Board]

Description

传说fans是一个数学天才。在他五岁那年,从一堆数字卡片中选出了4张 卡片:5,7,6,8。这4个数字有什么神秘之处呢?如果把这4张卡片自左往右的排成:5,6,7,8。你就会发现:原来这4个数字构成了等差数列!当年 fans选出了n组卡片,据说都能够构成等差数列。但是事实真的是这样吗?fans真的有这么神奇吗? n组数据就是fans选出的n组卡片,请你判断每一组卡片是否能构成等差数列.

Input

第一个数为数据的组数n,表示后面有n行,每行中的第一个数为该组数据的元素个数m(1≤m≤100),其后是m个正整数(不会超出int的表示范围)。

Output

如果能够构成等差数列,输出“yes”,否则输出“no”。

Sample Input

2

4 5 7 6 8

8 1 7 3 2 8 12 78 3

Sample Output

yes

no
题目大意:给你n个数,问是否可以构成等差数列
分析:水题,sort后判断一下是不是等差即可

#include <iostream>
#include <cstdio>
#include <cstring>
#define maxlen 30
#define INF -100000
using  namespace std;
long long  dp[30][30],visited[30][30];
int n,m,x,y;
int xx[]= {-2,-2,-1,-1, 1, 1, 2, 2};
int yy[]= {-1, 1,-2, 2,-2, 2,-1, 1};
int xxx[]={0,-1};
int yyy[]={-1,0};
int main ()
{
while(scanf("%d%d%d%d",&n,&m,&x,&y)!=EOF)
{
memset(dp,0,sizeof(dp));
dp[0][0]=1;
memset(visited,0,sizeof(visited));
visited[x][y]=visited[0][0]=1;
for(int i=0; i<8; ++i)
{
int nextx=x+xx[i];
int nexty=y+yy[i];
visited[nextx][nexty]=1;
}
for(int i=0; i<=n; ++i)
{
for(int j=0; j<=m; ++j)
{
for(int k=0;k<2;++k)
if(!visited[i][j])
dp[i][j]+=dp[i+xxx[k]][j+yyy[k]];
}
}
printf("%lld\n",dp
[m]);
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: