lydsy2523[Ctsc2001]聪明的学生
递归搞状态
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXN 11111
#include <queue>
#include <vector>
const int INF = 999999;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mid (r+l)>>1
const int maxn=120000;
int n,m,num[2222][4];
int p(int x,int y)
{
int c=y-x;
if(c<0)
c+=3;
return c;
}
int times(int i,int j, int t1,int t2,int t3)
{
int time=0;
if(j<=0||i<=0) return 0;
if(i==j)
time+=t3;
else if(i>j)
time+=times(j,i-j,t2,t3,t1)+p(t1,t3);
else
time+=times(i,j-i,t1,t3,t2)+p(t2,t3);
return time;
}
int main()
{
int t;
// freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m),n+m!=-2)
{
int t=n%3,a,b;
if(t==0)
t+=3;
if(t==3)
a=1,b=2;
else if(t==2)
a=1,b=3;
else a=2,b=3;
int tot=0;
for(int i=1; i<m; i++)
{
if(times(i,m-i,a,b,t)==n)
{
num[tot][a]=i;
num[tot][b]=m-i;
num[tot++][t]=m;
}
}
printf("%d\n",tot);
for(int i=0;i<tot;i++)
printf("%d %d %d\n",num[i][1],num[i][2],num[i][3]);
}
return 0;
}

浙公网安备 33010602011771号