玲珑学院OJ 1101 萌萌哒的第六题【思维枚举】

1101 - 萌萌哒的第六题

Time Limit:2s Memory Limit:128MByte

Submissions:302Solved:103

DESCRIPTION

一个凸多边形的每个角都是RGB三种颜色的其中一种,保证相邻的两个点颜色都不一样,请问是否能用多条不相交的对角线把多边形切成多个三角形,使得每个三角形的三个角颜色都不一样。
上述问题对于你来说可能比较简单,但是出题人遇到一个难题,他不会写special judge。也就是说当你把输出给出来,他不知道怎么判断是否正确,现在给出输入和输出,请你判断这个输出是否正确。

INPUT
包含多组数据(<=15),其中每组数据: 第一行一个整数表示多边形的顶点数n(4 <= n <= 1000), 接下来一行一个长度为n的只包含RGB三种字符的字符串,表示多边形每个点的颜色,相邻的字符在多边形上相信,第一和最后一个字符相邻 接下来n-3行,每行两个整数a, b(1 <= a, b <= n)表示这两个编号的点链接一条对角线,保证这两个点在多边形上不相邻。(注意:a不等于b,没有重边,即没有两对a b一样。)
OUTPUT
每组数据输出一行,"YES"表示这个答案正确,"NO"表示这个答案错误。
SAMPLE INPUT
7
RBGBRGB
1 3
3 7
5 7
5 3
4
RGRG
1 3
SAMPLE OUTPUT
YES
NO

思路:


1、首先我们O(n-3)去枚举每一条边,此时有两个点,另外再O(n)枚举出另外一个点,如果这三个点互相能够组成一个三角形,那么对应我们暴力判断一下三个点的颜色是否有相同的存在,如果有相同的,那么对应结果就是NO.


2、另外,我们还需要判断是否存在两条边相交,这里我们可以染色,设定vis【i】,vis【i】=1的是一条边的一侧,vis【i】=2的是这条边的另一侧,那么很熙然,我们可以知道【min(两点编号)+1,max(两点编号)-1】是这条边的某一侧,那么对应将这一侧设定为vis【i】=1,另外一侧设定为vis【i】=2即可。

对应我们暴力(n^2)去枚举两条边,对应判断一条边是否在另一条边的两侧都出现了端点,如果是,结果也是NO.


Ac代码:


#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
struct node
{
    int u,v;
}e[1050];
int mp[1050][1050];
int vis[1050];
char a[1050];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        memset(mp,0,sizeof(mp));
        scanf("%s",a+1);
        mp[n][1]=1;mp[1][n]=1;
        for(int i=1;i<=n-1;i++)
        {
            mp[i][i+1]=1;
            mp[i+1][i]=1;
        }
        for(int i=1;i<=n-3;i++)
        {
            scanf("%d%d",&e[i].u,&e[i].v);
            mp[e[i].u][e[i].v]=1;
            mp[e[i].v][e[i].u]=1;
        }
        int flag=0;
        for(int i=1;i<=n-3;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(j!=e[i].u&&j!=e[i].v)
                {
                    if(mp[j][e[i].u]==1&&mp[j][e[i].v]==1)
                    {
                        int x=e[i].u;
                        int y=e[i].v;
                        int z=j;
                        if(a[x]!=a[y]&&a[x]!=a[z]&&a[y]!=a[z])continue;
                        else flag=1;
                    }
                }
            }
        }
        for(int i=1;i<=n-3;i++)
        {
            memset(vis,0,sizeof(vis));
            int minn=min(e[i].u,e[i].v);
            int maxn=max(e[i].u,e[i].v);
            int l1=minn+1;
            int r1=maxn-1;
            for(int j=l1;j<=r1;j++)
            {
                vis[j]=1;
            }
            for(int j=1;j<=n;j++)
            {
                if(vis[j]==1)continue;
                else
                {
                    if(j==minn||j==maxn)continue;
                    vis[j]=2;
                }
            }
            for(int j=1;j<=n-3;j++)
            {
                int x=e[j].u,y=e[j].v;
                if(vis[x]==0||vis[y]==0)continue;
                else if(vis[x]!=vis[y])flag=1;
            }
        }
        if(flag==1)printf("NO\n");
        else printf("YES\n");
    }
}











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 东华大学计算机学院oj最后70道是计算机学院学生们在课程中所遇到的挑战和机遇。这些目涵盖了计算机科学和技术的不同领域和方向,需要学生们具备扎实的知识基础和解决问的能力。 这70道可以分为多个类别,包括数据结构与算法、数据库系统、网络与通信、人工智能与机器学习等。其中数据结构与算法类目需要学生们掌握常见的数据结构和算法,如链表、树、排序、查找等,以及各种经典算法的应用,如动态规划、贪心算法等。数据库系统类目要求学生们熟悉数据库设计和管理的基本原理,包括表的建立、查询语句的优化等。网络与通信类目涉及到计算机网络的基本原理和协议,要求学生们理解网络层次结构、IP地址分配、路由协议等。人工智能与机器学习类目则需要学生们具备一定的数学基础和统计学知识,能够理解和实现机器学习算法,如线性回归、逻辑回归、决策树等。 解答这70道目需要学生们进行思路分析、问拆解、编程实现等一系列步骤。在解答过程中,学生们将面临各种技术挑战和困难,如算法优化、数据处理、并发编程等。同时,他们也会收获到解决问的成就感和技术提升的经验。 东华大学计算机学院oj最后70道是学生们在计算机学科学习中的一个重要里程碑,它们代表了学生们对计算机科学技术的全面掌握和应用能力的提升。通过解答这些目,学生们将进一步巩固和扩展自己的计算机专业知识,培养独立思考和解决问的能力,为未来的职业发展打下坚实的基础。 ### 回答2: 东华大学计算机学院oj最后70道包括了计算机学院的各个专业方向的知识点和实际应用。这些目涉及到计算机编程、算法、数据结构、操作系统、数据库、网络等方面的内容。 在计算机编程方面,可能会涉及到一些常见的编程语言,如C、C++、Java等,要求学生使用所掌握的编程语言进行编程练习和问解决。这能帮助提高学生的编程实践能力和解决实际问的能力。 在算法和数据结构方面,可能会涉及到一些经典的算法问,如排序算法、查找算法、图算法等,要求学生掌握这些算法的原理和实现,并能够灵活运用于不同场景。 在操作系统方面,可能会涉及到一些操作系统的基本原理和概念,如进程管理、内存管理、文件系统等,要求学生了解操作系统的工作原理和实际应用。 在数据库方面,可能会涉及到一些数据库的基本操作和查询语言,如SQL语言,要求学生掌握数据库的基本概念和操作,并能够进行简单的数据存储和查询。 在网络方面,可能会涉及到一些网络协议和网络应用,如TCP/IP协议、HTTP协议、Web开发等,要求学生了解网络的基本原理和实现,并能够进行简单的网络编程和应用开发。 总之,东华大学计算机学院oj最后70道涵盖了计算机学院各个专业方向的知识点和应用,通过解答这些目,学生可以巩固和拓展自己的专业知识,并提高解决实际问的能力。 ### 回答3: 东华大学计算机学院oj最后70道,是计算机学院为培养学生计算机编程能力和算法解决问的能力而设计的。这些目的难度相对较高,需要学生有扎实的编程基础和算法知识。目涵盖了数据结构、算法设计与分析、计算机网络等多个方向。学生需要通过编程语言编写代码,并根据目要求设计算法,并在给定的时间内尽可能完成算法的实现。通过解答这些目,学生不仅可以提升自己的编程能力,还可以培养自己的逻辑思维、问分析和解决问的能力。 在解答这些目的过程中,学生需要独立思考,分析问的本质和要求,并设计出合适的算法和编程代码。通过多次实践,学生可以提高自己的编程速度和算法设计能力,不断完善自己的编程技巧。同时,解答这些目也培养了学生的团队合作能力,因为在解决复杂问时,往往需要多人共同协作,共同完成任务。 总之,东华大学计算机学院oj最后70道对于计算机学生的学习和成长是非常有益的。它不仅可以提高学生的编程能力和算法设计能力,还可以锻炼学生的团队合作和解决问的能力。通过不断解答这些目,学生可以不断地完善自己的技能,为今后的学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值