10272 - DDR King
Posted: Wed Feb 15, 2006 5:38 pm
plz give me some data set.
#include <stdio.h>
#define M 510
int even1[M], even2[M];
int odd1[M], odd2[M];
int first[M], last[M];
int main()
{
int t1, t2;
int i, j;
even1[1]=0; even2[1]=0;
odd1[1]=1; odd2[1]=3;
first[1]=1; last[1]=3;
even1[2]=2; even2[2]=6;
odd1[2]=1; odd2[2]=3;
first[2]=2; last[2]=6;
for(i=3; i<=500; i++)
{
even1=even1[i-1]; even2=even2[i-1];
odd1=odd1[i-1]; odd2=odd2[i-1];
t1=first[i-1]+((int)(i/4))*((int)(i/4))+1;
t2=last[i-1]+(((int)(i/4))*((int)(i/4))+1)*3;
if(t1%2==1){ if(odd2<t2) odd2=t2; }
else{ if(even2<t2) even2=t2; }
first=t1; last=t2;
for(j=1; j<=i-2; j++)
{
if(even2[i]<odd2[j]+odd2[i-j-1]) even2[i]=odd2[j]+odd2[i-j-1];
if(even2[i]<even2[j]+even2[i-j-1]) even2[i]=even2[j]+even2[i-j-1];
if(odd2[i]<odd2[j]+even2[i-j-1]) odd2[i]=odd2[j]+even2[i-j-1];
if(odd2[i]<even2[j]+odd2[i-j-1]) odd2[i]=even2[j]+odd2[i-j-1];
}
}
int temp;
int n, m, k;
int t;
scanf("%d", &t);
for(int loof=0; loof<t; loof++)
{
scanf("%d %d %d", &n, &k, &m);
if(m%100 || n<k) printf("No\n");
else
{
m/=100;
if(n==k || n==k+1)
{
if(first[k]%2==m%2)
{
if(first[k]<=m && m<=last[k]) printf("Yes\n");
else printf("No\n");
}
else printf("No\n");
}
else
{
if(first[k]%2==m%2)
{
if(first[k]<=m && m<=last[k]) printf("Yes\n");
else if(m<first[k]) printf("No\n");
else
{
temp=n-k-1;
m-=last[k];
if(m%2==0)
{
if(even1[temp]<=m && m<=even2[temp]) printf("Yes\n");
else printf("No\n");
}
else
{
if(odd1[temp]<=m && m<=odd2[temp]) printf("Yes\n");
else printf("No\n");
}
}
}
else
{
if(first[k]>m) printf("No\n");
else
{
temp=n-k-1;
if(m>last[k]) m-=last[k];
else m=1;
if(m%2==0)
{
if(even1[temp]<=m && m<=even2[temp]) printf("Yes\n");
else printf("No\n");
}
else
{
if(odd1[temp]<=m && m<=odd2[temp]) printf("Yes\n");
else printf("No\n");
}
}
}
}
}
}
return 0;
}
#include <stdio.h>
#define M 510
int even1[M], even2[M];
int odd1[M], odd2[M];
int first[M], last[M];
int main()
{
int t1, t2;
int i, j;
even1[1]=0; even2[1]=0;
odd1[1]=1; odd2[1]=3;
first[1]=1; last[1]=3;
even1[2]=2; even2[2]=6;
odd1[2]=1; odd2[2]=3;
first[2]=2; last[2]=6;
for(i=3; i<=500; i++)
{
even1=even1[i-1]; even2=even2[i-1];
odd1=odd1[i-1]; odd2=odd2[i-1];
t1=first[i-1]+((int)(i/4))*((int)(i/4))+1;
t2=last[i-1]+(((int)(i/4))*((int)(i/4))+1)*3;
if(t1%2==1){ if(odd2<t2) odd2=t2; }
else{ if(even2<t2) even2=t2; }
first=t1; last=t2;
for(j=1; j<=i-2; j++)
{
if(even2[i]<odd2[j]+odd2[i-j-1]) even2[i]=odd2[j]+odd2[i-j-1];
if(even2[i]<even2[j]+even2[i-j-1]) even2[i]=even2[j]+even2[i-j-1];
if(odd2[i]<odd2[j]+even2[i-j-1]) odd2[i]=odd2[j]+even2[i-j-1];
if(odd2[i]<even2[j]+odd2[i-j-1]) odd2[i]=even2[j]+odd2[i-j-1];
}
}
int temp;
int n, m, k;
int t;
scanf("%d", &t);
for(int loof=0; loof<t; loof++)
{
scanf("%d %d %d", &n, &k, &m);
if(m%100 || n<k) printf("No\n");
else
{
m/=100;
if(n==k || n==k+1)
{
if(first[k]%2==m%2)
{
if(first[k]<=m && m<=last[k]) printf("Yes\n");
else printf("No\n");
}
else printf("No\n");
}
else
{
if(first[k]%2==m%2)
{
if(first[k]<=m && m<=last[k]) printf("Yes\n");
else if(m<first[k]) printf("No\n");
else
{
temp=n-k-1;
m-=last[k];
if(m%2==0)
{
if(even1[temp]<=m && m<=even2[temp]) printf("Yes\n");
else printf("No\n");
}
else
{
if(odd1[temp]<=m && m<=odd2[temp]) printf("Yes\n");
else printf("No\n");
}
}
}
else
{
if(first[k]>m) printf("No\n");
else
{
temp=n-k-1;
if(m>last[k]) m-=last[k];
else m=1;
if(m%2==0)
{
if(even1[temp]<=m && m<=even2[temp]) printf("Yes\n");
else printf("No\n");
}
else
{
if(odd1[temp]<=m && m<=odd2[temp]) printf("Yes\n");
else printf("No\n");
}
}
}
}
}
}
return 0;
}