zoukankan      html  css  js  c++  java
  • BZOJ2523/LOJ2646 聪明的学生

    BZOJ2523/LOJ2646 聪明的学生

    第一道CTSC的题。
    因为是思维题,所以思路就不写了。直接看代码吧。

    #include<bits/stdc++.h>
    #define M 30010
    
    using namespace std;
    
    int n,m,p,cnt;
    int a[3],pre[3]={2,0,1},nxt[3]={1,2,0};
    
    struct node {
    	int a,b,c;
    }ans[M];
    
    bool cmp(node x,node y) {
    	if(x.a!=y.a) {
    		return x.a<y.a;
    	}
    	if(x.b!=y.b) {
    		return x.b<y.b;
    	}
    	return x.c<y.c;
    }
    
    int Check(int x,int y,int p) {
    	if(x==y) {
    		return p+1;
    	}
    	return x>y?Check(y,x-y,nxt[p])+2:Check(y-x,x,pre[p])+1;
    }
    
    void Init() {
    	memset(ans,0,sizeof(ans));
    	cnt=0;
    	p=0;
    	return;
    }
    
    void Solve() {
    	p=(n-1)%3;
    	for(int i=1;i<=m-1;i++) {
    		int j=m-i;
    		if(Check(i,j,p)==n) {
    			a[p]=m;
    			a[nxt[p]]=i;
    			a[pre[p]]=j;
    			ans[++cnt]=(node){a[0],a[1],a[2]};
    		}
    	}
    	return;
    }
    
    void Print() {
    	printf("%d
    ",cnt);
    	sort(ans+1,ans+cnt+1,cmp);
    	for(int i=1;i<=cnt;i++) {
    		printf("%d %d %d
    ",ans[i].a,ans[i].b,ans[i].c);
    	}
    	return;
    }
    
    void Work() {
    	Init();
    	Solve();
    	Print();
    	return;
    }
    
    int main()
    {
    	while(scanf("%d%d",&n,&m)&&(!(n==-1&&m==-1))) {
    		Work();
    	}
    	return 0;
    }
    
  • 相关阅读:
    Python的网络编程 Socket编程
    Python之数据库模块安装 MySQLdb
    Python的内置函数
    Servlet及Tomcat介绍
    xml解析
    JDBC基础
    反射练习
    lambda和匿名内部类
    Object.wait()实现生产者消费者模式
    synchronized、lock及线程安全集合
  • 原文地址:https://www.cnblogs.com/luoshui-tianyi/p/12020094.html
Copyright © 2011-2022 走看看