• 题解:LOJ540游戏


    题目描述

    小L计划进行n场游戏,每场游戏使用一张地图,小 L 会同时使用三辆车在该地图上完成游戏。
    小 L 的赛车有三辆,分别用大写字母 A、B、C 表示。地图是一张无向简单图(没有重边或自环),每次他会在地图中选择不同的三个点 i,j,k满足\(i<j<k\)且两两之间均有边。此时他会让 A 从i到j,B 从j到k,C从k到i,完成一场游戏。他记得有一张地图使得他恰好能完成n场不同的游戏,且这个地图顶点数不超过500,请你帮他找到这张地图。
    有时候小L会记得地图的一些特点,他会把这些告诉你以帮助你找到地图。
    也就是说,给一个正整数n,请你构造一个无向简单图使得其三元环个数为n。

    说实话这个题一看以为是什么高深的玩意,完全看不出是NOIP的难度

    做这个题的时候,各位神犇需要做的就是,把之前学的各种算法,数据结构全忘了QAQ
    蒟蒻的搜索T到飞起

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<vector>
    #include<queue>
    using namespace std;
    
    #define re register
    #define ll long long
    #define gc getchar()
    inline int read()
    {
     	re int x(0),f(1);re char c(gc);
        while(c>'9'||c<'0')f=c=='-'?-1:1,c=gc;
        while(c>='0'&&c<='9')x=x*10+c-48,c=gc;
        return f*x;
    }
    
    const int N=505;
    int f[N][N],a[N],b[N],c[N],n;
    
    int main()
    {
        n=read();
        int i,tot;
        for(tot=1;n;tot++)
        {
    		for(i=1;i<tot&&i*(i-1)/2<=n;i++)
    			f[i][tot]=1;
    		n-=(i-1)*(i-2)/2;
    	}
        cout<<tot<<endl;
        for(i=1;i<tot;i++)
        {
    		for(int j=i+1;j<=tot;j++)
    			cout<<(f[i][j]|f[j][i])<<" ";
    		cout<<endl;
    	}
        return 0;
    }
    
  • 相关阅读:
    排序预处理的思想
    枚举
    math细节
    physics 衍射和ganshe
    hearing speaking words
    appium的环境安装
    基于ASP.NET MVC 4.0的音乐商店全套项目教程
    WPF/WinForm 关于窗体大小变化的消息机制处理
    用WPF搭建自己的万能播放器(C#)前篇
    VS2010网站发布到服务器上
  • 原文地址:https://www.cnblogs.com/zijinjun/p/10695125.html
Copyright © 2020-2023  润新知