阿里九游开放平台近日上架了一款新的益智类游戏——成三棋。成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示:
成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子。我们可以用坐标系来描述棋盘:
如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三。现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的。请你帮小红计算他成三的线段数。
样例对应的棋盘如下:
输入第一行两个整数 n,m(3 \le n, m \le 9)n,m(3≤n,m≤9),nn 表示小红的棋子数,mm 表示小明的棋子数。
接下来 nn 行输入小红的棋子坐标。
接下来 mm 行输入小明的棋子坐标。
输入保证坐标合法,并且棋子之间不重合。
输出小红成三的线段数。
6 3
-1 0
-2 0
-3 0
-1 -1
-1 1
1 0
0 2
0 3
2 2
样例输出
2
我的思路比较简单,先把输入的数据存放在二维数组a[10][2]里,然后分别以行、列的方式遍历该数组,对该数组中横、纵坐标相同的点进行分类,-3到3的7个数字,num[7]对在每一条纵线和横线上的点进行统计,从而知道每一个线段方向上有几个点,b[7][6]则是记录横坐标或者纵坐标相同的点记录另一维的数字,以便之后判断是否在一条线段上。
在judge函数里,如果一个线段方向上有超过3个点,若这个数字不是0,那么肯定只有三个点,而且这三个点在一条线段上(从图里可以看出)。如果这个数字是0,可以对b[i][]里存的数字进行排序,先从小到大,如果前三个数字分别是-3,-2,-1,那么肯定符合要求,再从大到小排序,如果前三个数字分别是3,2,1,也是符合要求的。之所以进行两次排序判断,是因为可能有6个点,在两条线段上。
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
int Point_num,useless,a[10][2]={-99},b[7][6]={-99},so=0;
int num[7]={0};
void judge()
int *p,i;
for(i=0;i<7;i++)
if(num[i]>2)
p=b[i];
if(i!=3)
so++;
sort(p,p+num[i],less<int>());
if(p[0]==-3 && p[1]==-2 &&p[2]==-1)
so++;
sort(p,p+num[i],greater<int>());
if(p[0]==3 && p[1]==2 &&p[2]==1)
so++;
void d(int c)
int i,j;
for(i=0;i<7;i++)
num[i]=0;
for(j=0;j<6;j++)
b[i][j]=-99;
for(i=0;i<Point_num;i++)
j=a[i][c]+3;
b[j][num[j]++]=a[i][1-c];
int main(){
int i,j,k;
cin>>Point_num>>useless;
for(i=0;i<Point_num;i++)
cin>>a[i][0]>>a[i][1];
for(i=0;i<useless;i++)
cin>>j>>k;
for(i=0;i<2;i++)
d(i);
judge();
cout<<so;
阿里九游开放平台近日上架了一款新的益智类游戏——成三棋。成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子。我们可以用坐标系来描述棋盘: 如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三。现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的。请你帮小红计算他成三的线段数。样例对应...
6-4 选队长 (10 分)
小明最近喜欢玩一款新游戏。在该游戏中,需要组建队伍去完成任务以获取奖励。小明挑出了所有的队员(每个人能力不同),需要一个函数挑出队长(能力最强的队员)。
函数接口定义:
void showCaptain(TeamMember team[], int n);
参数说明:team中从下标0开始存放n个TeamMember,n>0。 函数功能:找出队长并输出其各项信...
此题用一个二维数组来模拟局面,模拟棋盘的坐标,通过输入小红旗子和小黑旗子来在二维数组中确定旗子的位置, 此棋盘一共只有 16条直线,所以只要确定 放棋盘中旗子的位置别出现混乱就行了
import java.util.Scanner;public class A阿里的新游戏 {
int count = 0;
int arrays[][] = {
阿里九游开放平台近日上架了一款新的益智类游戏——成三棋。成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示:
成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子。我们可以用坐标系来描述棋盘:
如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三。现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的。请你帮小红计算他成三的线段数。
public class Main2 {
// public static int dir[][] = {{0,1},{0,-1},{-1,0},{1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
public static boolean mp[][]=new boolean[8]...
阿里九游开放平台近日上架了一款新的益智类游戏——成三棋。成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示:
成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子。我们可以用坐标系来描述棋盘:
如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三。现在,小红和小明两人在游
工作空闲之余,蒜头君经常带着同事们做游戏,最近蒜头君发明了一个好玩的新游戏:n 位同事围成一个圈,同事 A 手里拿着一个兔妮妮的娃娃。蒜头君喊游戏开始,每位手里拿着娃娃的同事可以选择将娃娃传给左边或者右边的同学,当蒜头君喊游戏结束时,停止传娃娃。此时手里拿着娃娃的同事即是败者。
玩了几轮之后,蒜头君想到一个问题:有多少种不同的方法,使得从同事 A 开始传娃娃,传了 m 次之后...
题目背景是成三棋,题目要求是输入小红和小明的棋子位置,用坐标表示(棋盘的坐标系建在原点中心,横纵坐标都是从-3到3,共9个格子),然后输出小红的成三数。(这个线段上有三个小红的棋子)。
题目描述很简单,但是我花了一个小时才AC,而且用的是最笨的方法,枚举了16种可能的情况,正解肯定不会是这个,但好在还是AC了...
这也是我第一次做这种线上赛,发现自己的实力还是很弱,我清楚的记得比赛开始10分
阿里九游开放平台近日上架了一款新的益智类游戏——成三棋。成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示:
成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子。我们可以用坐标系来描述棋盘:
如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三。现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的。请你帮小红计算他成三的线段数。
题链:https://nanti.jisuanke.com/t/15499
这题观察图纸可知成三线段上的相邻点之间的距离有1,2,3三种情况的,同时要成线段必然是同横坐标或者纵坐标,然后我们排除掉穿过0的特殊案例(例如:-1,1,3)就可以啦。
#include <queue>
#include <cmath>
#include <cstdio>
#incl...
蒜头君来蒜厂面试的时候,曾经遇到这样一个面试题:
给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一个。当时可算是给蒜头君难住了。现在蒜头君来考考你。
第一行输入一个整数n(1≤n≤100000),接下来一行输入nn个 int 范围内的整数。
输出出现次数最多的数和出现的次数,中间用一个空格隔开,如果有多个重复出现的数,输出值最大...
蒜头君有一只坐骑,人马。
一天,蒜头君骑着他的坐骑走上了一片n \times mn×m的大荒野,一开始时,蒜头君在(1,1)(1,1)点,他要前往(n,m)(n,m)点,蒜头君的人马每次可以向右或向下移动一格。然而这片荒野并不平静,除了起点和终点外每个点都有一只怪物会袭击蒜头君。
然而蒜头君的人马强大无比,它会先对怪物造成等同于它攻击力的...
这题可以用线段树的思想做
只要我们得到任意一个区间的最大值和最小值,将其存储在数组 Max[] 和 Min[] 中,每查询一次就输出一次,就能愉快的AC这题了
Max[ ]数组和Min[ ]数组的建立方法与线段树建树方法一样
建立关于 Max[ ]数组
if(l==r)
Max[ro...
anaconda建立新环境,报错:CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsi
PyQt设置文本超链接
numpy返回上下三角矩阵