序列匹配
来源:互联网 发布:斯皮尔伯格知乎 编辑:程序博客网 时间:2024/05/17 03:43
Time Limit: 5000 ms Memory Limit: 128 MB
Total Submission: 13 Submission Accepted: 9
Total Submission: 13 Submission Accepted: 9
Description
给定两个长度均为3的数字序列,每位上为一个范围是1-N的正整数,求有多少个仍然由3个1-N的整数构成的数字序列能与给定的两个序列中的任意一个匹配。
如果两个序列匹配,当且仅当两个序列中的每个对应数字的最近距离不超过2。
比如当N为9时,每一位数字可能是1,2,3,4,5,6,7,8,9,并且数字是循环的。也就是说9和1是相邻的。
数字之间的距离就是两个数字的位置之差。
也就是说在上面的例子中,9和1的最近距离是1,9和2的最近距离是2,2和5的最近距离是3。
比如现在给定两个序列组合为(1,2,3)和(4,5,6), (2,4,8)或者(1, N, 5) 是能和两个序列匹配中的至少一个匹配的,但是(1, 5, 6)是不能和给定的两个序列中的任何一个匹配的。
如果两个序列匹配,当且仅当两个序列中的每个对应数字的最近距离不超过2。
比如当N为9时,每一位数字可能是1,2,3,4,5,6,7,8,9,并且数字是循环的。也就是说9和1是相邻的。
数字之间的距离就是两个数字的位置之差。
也就是说在上面的例子中,9和1的最近距离是1,9和2的最近距离是2,2和5的最近距离是3。
比如现在给定两个序列组合为(1,2,3)和(4,5,6), (2,4,8)或者(1, N, 5) 是能和两个序列匹配中的至少一个匹配的,但是(1, 5, 6)是不能和给定的两个序列中的任何一个匹配的。
Input
多组输入,以EOF结束。
每组输入包含三行第一行为一个整数N(1 <= N <= 50),第二行和第三行都是以三个空格分隔的整数。
每组输入包含三行第一行为一个整数N(1 <= N <= 50),第二行和第三行都是以三个空格分隔的整数。
Output
对于每组输入,输出一个数字,表示能和给定的两个序列中的任意一个匹配的序列的个数。
Sample Input
OriginalTransformed501 2 35 6 7
50[EOL] 1[SP]2[SP]3[EOL] 5[SP]6[SP]7[EOL] [EOF]
Sample Output
OriginalTransformed249
在这题第一次用到了三维数组
#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<iostream>#include<algorithm>#include<queue>#include<stack>#include<sstream>#include<map>//#define DEBUGconst int maxn = 55;using namespace std;int main() {#ifdef DEBUGfreopen("Text.txt", "r", stdin);#endif // DEBUGcin.tie(0);cin.sync_with_stdio(false);int n;while (scanf("%d",&n)!=EOF) {bool arr[maxn][maxn][maxn];memset(arr, 0, sizeof(arr));int a1, b1, c1, a2, b2, c2;int sum = 0;scanf("%d%d%d", &a1, &b1, &c1);scanf("%d%d%d", &a2, &b2, &c2);int i, j, k;for(i=a1-2;i<=a1+2;i++)for(j=b1-2;j<=b1+2;j++)for (k = c1 - 2; k <= c1 + 2; k++) {int x = i < 1 ? (i + n) : (i > n) ? i - n : i;int y = j < 1 ? (j + n) : (j > n) ? j - n : j;int z = k < 1 ? (k + n) : (k > n) ? k - n : k;if (arr[x][y][z] == 0 && x>0 && x <= n && y>0 && y <= n && z > 0 && z <= n) {arr[x][y][z] = 1;sum++;}}for (i = a2 - 2; i <= a2 + 2; i++)for (j = b2 - 2; j <= b2 + 2; j++)for (k = c2 - 2; k <= c2 + 2; k++) {int x = i < 1 ? (i + n) : (i > n) ? i - n : i;int y = j < 1 ? (j + n) : (j > n) ? j - n : j;int z = k < 1 ? (k + n) : (k > n) ? k - n : k;if (arr[x][y][z] == 0 && x>0 && x <= n && y>0 && y <= n && z > 0 && z <= n) {arr[x][y][z] = 1;sum++;}}printf("%d\n", sum);}return 0;}
0 0
- 序列匹配
- javaScript 数字序列匹配
- 括号序列匹配问题
- C++ STL子序列匹配
- 括号匹配(小中大括号序列)
- 模式匹配与子序列
- 字符串匹配之二:DNA序列匹配度的计算
- NOI2009 变换序列【transform】二分图匹配
- 【二分图匹配】【NOI2009】变换序列
- [BZOJ1562]NOI2009变换序列|二分图匹配
- 【bzoj1562】 NOI2009 变换序列 二分图匹配
- 栈的弹出序列是否与压入序列匹配?
- 基因序列相似性问题CCR版(KM模式匹配)
- 判断栈的压入,弹出序列是否匹配
- Linux中Java程序调用Blast进行序列匹配
- [BZOJ 1562][NOI 2009]变换序列(二分图匹配)
- BZOJ 1562 [NOI2009]变换序列 (二分图匹配)
- [NOI2009]变换序列(二分图完美匹配)
- TF-IDF
- 123
- java中继承Thread类的实际编码应用
- blockly源码未压缩版本,运行需添加closure依赖库
- hbuilder 配置 xdebug 调试 php
- 序列匹配
- LuCI2 (OpenWrt web 管理界面)
- PHP
- many-to-one与one-to-many映射文件关于外键的问题
- java线程池
- Springboot介绍
- vertical-align属性学习记录
- 内存分析工具 MAT 的使用
- Edit Distance