标签:codeforces 269 round d e
A:判断熊象,六个参数,有4个是腿,必须一样,另外两个如果相同是象,不同是熊,不符合要求是喵星人!
B:给出几个数,将他们以不下降的方式排一下,若有三种及其以上排法,输出YES,然后任意输出三种排法(序号),有SPJ。
C:有n张牌,搭建房子,问有多少种可以搭出来的层数。
来张图吧!表示怎么搭,看不懂?GO HITTING ME!(来打我吖?)
我来一个20以内的表:01001,01101,10111,11111,没有能摆出2的,不要问我为什么。
D:给一个大墙(高度略参差不齐),然后再给一面小墙,往上拼接!
比如下图,答案就是2,同样不要问我为什么,看代码吧。
E:没读题。
题解:
A,B:略、
C:枚举每一层,看能不能得到,我代码里for每次循环都是一层,fr表示当前层数。
D:预处理+KMP。快速水过,代码写渣了,只需要对m==1特判一下,其它就是正常的裸KMP,来一发就过了。
E:233。
代码:按顺序是ABCD,大不了你去找样例跑一遍就知道哪题是哪题了。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int f[10],num[10];
int main()
{
// freopen("test.in","r",stdin);
int i,j,k,flag=0;
for(i=1;i<=6;i++)scanf("%d",&f[i]);
sort(f+1,f+7);
for(i=1;i<=6;i++)
{
if(f[i]==f[i-1])
{
num[i]=num[i-1];
}
num[i]++;
if(num[i]==4)
{
flag=1;
for(j=0;j<4;j++)
{
f[i-j]=0;
}
}
}
if(!flag)
{
printf("Alien\n");
return 0;
}
else
{
sort(f+1,f+7);
if(f[5]==f[6])
{
puts("Elephant");
}
else puts("Bear");
}
return 0;
}#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 2005
using namespace std;
struct KSD
{
int x,f;
bool operator < (const KSD& a)const
{
return x<a.x;
}
}s[N];
struct Syndra
{
int v,next;
}e[N];
int head[N],cnt,num[N],visit[N];
int n,ans,m;
void add(int u,int v)
{
cnt++;
e[cnt].v=v;
e[cnt].next=head[u];
head[u]=cnt;
}
int pre[N];
int ppp[N],star;
void print(int x,int p)
{
int flag=0;
if(x>m)
{
ans++;
for(star=n;p;p=pre[p])ppp[star--]=s[p].f;
for(star=1;star<=n;star++)printf("%d ",ppp[star]);
puts("");
if(ans==3)exit(0);
return ;
}
int i,v;
for(i=head[x];i;i=e[i].next)
{
v=e[i].v;
if(!visit[v])
{
flag=1;
visit[v]=1;
pre[v]=p;
print(x,v);
visit[v]=0;
}
}
if(!flag)print(x+1,p);
}
int main()
{
int i,j,k,flag=0;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&s[i].x),s[i].f=i;
sort(s+1,s+n+1);
for(i=1;i<=n;i++)
{
if(s[i].x!=s[i-1].x)num[++m]=1;
else num[m]++;
if(num[m]>=3)flag+=2;
if(num[m]==2)flag++;
add(m,i);
}
if(flag<2)
{
puts("NO");
return 0;
}
else
{
puts("YES");
print(1,0);
}
return 0;
}#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
long long n,sum,now,ans,fr;
int main()
{
long long i,j,k;
cin>>n;
for(sum=now=2;sum<=n;now+=3,sum+=now)
{
fr++;
if((n+fr)%3==0)ans++;
}
cout<<ans;
return 0;
}#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 201000
using namespace std;
int fix,a[N],pre[N],n,m,s[N],ans;
int main()
{
// freopen("test.in","r",stdin);
int i,j,k,x,y;
scanf("%d%d",&n,&m);
if (m == 1) {
printf("%d\n", n);
return 0;
}
if (n < m) {
printf("0");
return 0;
}
scanf("%d",&x);
for(i=1;i<n;i++)
{
scanf("%d",&y);
a[i]=y-x;x=y;
}n--;
scanf("%d",&x);
for(i=1;i<m;i++)
{
scanf("%d",&y);
s[i]=y-x;x=y;
}m--;
s[m + 1] = 1 << 30;
for(fix=0,i=2;i<=m;i++)
{
while(fix&&s[fix+1]!=s[i])fix=pre[fix];
if(s[fix+1]==s[i])fix++;
pre[i]=fix;
}
for(fix=0,i=1;i<=n;i++)
{
while(fix&&s[fix+1]!=a[i])fix=pre[fix];
if(s[fix+1]==a[i])fix++;
if(fix==m)ans++;
}
printf("%d\n",ans);
return 0;
}
好吧,其实我是来贴代码的,题解神马的根本就没好好写。
不爽?来打我吖?!!
标签:codeforces 269 round d e
原文地址:http://blog.csdn.net/vmurder/article/details/39597795