阿里的新游戏
阿里九游开放平台近日上架了一款新的益智类游戏——成三棋。成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示:
成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子。我们可以用坐标系来描述棋盘:
如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三。现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的。请你帮小红计算他成三的线段数。
样例对应的棋盘如下:
输入第一行两个整数 n,m(3≤n,m≤9)n,m(3 \le n, m \le 9)n,m(3≤n,m≤9),nnn 表示小红的棋子数,mmm 表示小明的棋子数。
接下来 nnn 行输入小红的棋子坐标。
接下来 mmm 行输入小明的棋子坐标。
输入保证坐标合法,并且棋子之间不重合。
输出小红成三的线段数。
样例输入
6 3
-1 0
-2 0
-3 0
-1 -1
-1 1
1 0
0 2
0 3
2 2
样例输出
2
模拟,水题,考虑下每行每列即可。
#include
#include
#include
using namespace std;
int a[100],b[100],c[10];
int main()
{
int n,m,x,y;
cin >> n >> m;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(int i = 0;i < n; ++i)
{
cin>>x>>y;
x+=3,y+=3;
if(x!=3) ++a[x];
else
{
if(y > 3) ++c[0];
else ++c[1];
}
if(y!=3) ++b[y];
else
{
if(x < 3) ++c[2];
else ++c[3];
}
}
for(int i = 0;i < m; ++i) cin>>x>>y;
int ans = 0;
for(int i = 0;i <= 6; ++i)
{
if(i < 4)
{
if(c[i] == 3) ++ans;
}
if(i == 3) continue;
if(a[i] == 3) ++ans;
if(b[i] == 3) ++ans;
}
cout<
阿里天池的新任务(简单)
阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 ttt,判断它在另一个根据规则生成的 DNA 碱基序列 sss 中出现了多少次。
首先,定义一个序列 www:
wi={b,i=0(wi−1+a)modn,i>0\displaystyle w_{i} = \begin{cases}b, & i = 0\\(w_{i-1} + a) \mod n, & i > 0\end{cases}wi={b,(wi−1+a)modn,i=0i>0
接下来,定义长度为 nnn 的 DNA 碱基序列 sss(下标从 000 开始):
si={A,(L≤wi≤R)∧(wi mod 2=0)T,(L≤wi≤R)∧(wi mod 2=1)G,((wi
其中 ∧\land∧ 表示“且”关系,∨\lor∨ 表示“或”关系,a mod ba\ \mathrm{mod}\ ba mod b 表示 aaa 除以 bbb 的余数。
现给定另一个 DNA 碱基序列 ttt,以及生成 sss 的参数 n,a,b,L,Rn , a , b , L , Rn,a,b,L,R,求 ttt 在 sss 中出现了多少次。
数据第一行为 555 个整数,分别代表 n,a,b,L,Rn , a , b , L , Rn,a,b,L,R。第二行为一个仅包含A
、T
、G
、C
的一个序列 ttt。