【九度】题目1375:陈博的完美主义(25分)
2014-05-19 10:30
253 查看
题目1375:陈博的完美主义(25分)
时间限制:1 秒内存限制:32 兆特殊判题:否提交:1083解决:267
题目描述:
上一回合大家都知道,在JOBDU团队里,陈博是最讲平均主义的人,对数字十分敏感。事实上,他还是个数字完美主义者。例如看到N个数字的时候,从1到N的每个数都需要在其中出现且仅出现一次,否则他就觉得这个数字序列不完美。后来,我明白了:这是排列!
对于一个整数序列d1, d2, d3 ... dn,你是否能够算出至少改变其中的几个数,才能把他们变成从1到N的一个排列?例如,对于整数序列 3, 2, 2,我们只需要将其中的一个2改为1就能得到一个从1到3的排列:3, 1, 2
输入:
每个测试文件包含多个测试案例,每个测试案例两行,第一行包括一个整数N,代表整数序列的长度,第二行是以空格隔开的N个整数,代表该整数序列。其中我们能保证1 <= N <= 10^5,每个整数的长度不超过100.
输出:
对于每个整数序列,输出一行,包含一个整数,表明至少要改变该整数序列的多少个数才能得到一个从1到N的排列。
样例输入:
3
3 2 2
1
1
样例输出:
1
0
答疑:
解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-8098-1-1.html
【解题思路】
1、声明一个长度为100002大小的数组,用来标记下标为i的数字是否出现过。
2、如果数据长度比maxLen = 6大,那么就num++,因为数据值不在1到n之间。
3、如果长度不大于maxLen,就判断是否在1和n之间,如果不在,num++;
4、接下来,如果在1和n之间,判断是否已经出现过,出现过,num++,否则numArr[tempNum] = 1,标记该数据已经出现了。
最后输出即是结果。
Java AC
C++ AC
时间限制:1 秒内存限制:32 兆特殊判题:否提交:1083解决:267
题目描述:
上一回合大家都知道,在JOBDU团队里,陈博是最讲平均主义的人,对数字十分敏感。事实上,他还是个数字完美主义者。例如看到N个数字的时候,从1到N的每个数都需要在其中出现且仅出现一次,否则他就觉得这个数字序列不完美。后来,我明白了:这是排列!
对于一个整数序列d1, d2, d3 ... dn,你是否能够算出至少改变其中的几个数,才能把他们变成从1到N的一个排列?例如,对于整数序列 3, 2, 2,我们只需要将其中的一个2改为1就能得到一个从1到3的排列:3, 1, 2
输入:
每个测试文件包含多个测试案例,每个测试案例两行,第一行包括一个整数N,代表整数序列的长度,第二行是以空格隔开的N个整数,代表该整数序列。其中我们能保证1 <= N <= 10^5,每个整数的长度不超过100.
输出:
对于每个整数序列,输出一行,包含一个整数,表明至少要改变该整数序列的多少个数才能得到一个从1到N的排列。
样例输入:
3
3 2 2
1
1
样例输出:
1
0
答疑:
解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-8098-1-1.html
【解题思路】
1、声明一个长度为100002大小的数组,用来标记下标为i的数字是否出现过。
2、如果数据长度比maxLen = 6大,那么就num++,因为数据值不在1到n之间。
3、如果长度不大于maxLen,就判断是否在1和n之间,如果不在,num++;
4、接下来,如果在1和n之间,判断是否已经出现过,出现过,num++,否则numArr[tempNum] = 1,标记该数据已经出现了。
最后输出即是结果。
Java AC
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.StreamTokenizer; public class Main { /* *2014年5月19日10:25:09 */ public static void main(String[] args) throws Exception { StreamTokenizer st = new StreamTokenizer(new BufferedReader( new InputStreamReader(System.in))); while (st.nextToken() != StreamTokenizer.TT_EOF) { int n = (int) st.nval; int numArr[] = new int[n+1]; int num = 0; for (int i = 0; i < n; i++) { st.nextToken(); int tempNum = (int) st.nval; if(tempNum == Integer.MAX_VALUE || tempNum < 1 || tempNum > n){ num++; }else { if (numArr[tempNum] == 0) { numArr[tempNum] = 1; }else { num++; } } } System.out.println(num); } } } /************************************************************** Problem: 1375 User: wangzhenqing Language: Java Result: Accepted Time:590 ms Memory:29504 kb ****************************************************************/
C++ AC
#include<stdio.h> #include<string.h> #include <stdlib.h> const int maxn = 100002; const int maxm = 102; const int maxLen = 6; int n, i; char s[maxm]; int numArr[maxn]; int num; int main(){ while(scanf("%d", &n) != EOF){ num = 0; memset(numArr, 0, sizeof(numArr)); for(i = 0; i < n; i++){ scanf("%s", s); if(strlen(s) > maxLen){ num++; continue; } int tempNum = atoi(s); if(tempNum < 1 || tempNum > n){ num++; continue; } if(numArr[tempNum] == 0){ numArr[tempNum] = 1; }else{ num++; } } printf("%d\n", num); } return 0; } /************************************************************** Problem: 1375 User: wangzhenqing Language: C++ Result: Accepted Time:150 ms Memory:1412 kb ****************************************************************/
相关文章推荐
- 题目1375:陈博的完美主义(25分)
- 九度OJ 1375 陈博的完美主义 (枚举,细心细心)
- 九度 1375 陈博的完美主义
- 【九度】题目1342:寻找最长合法括号序列II(25分)
- 【九度】题目1358:陈博的平均主义
- 九度 题目1339:ACM(25分)
- 九度 题目1342:寻找最长合法括号序列II(25分)
- <九度 OJ>题目1069:查找学生信息
- 【九度】题目1023:EXCEL排序
- 【九度】题目1096:日期差值
- 九度oj 题目1335:闯迷宫
- 九度 OJ 题目1366:栈的压入、弹出序列
- 九度OJ 题目1018:统计同成绩学生人数(利用Hash)
- 九度OJ-题目1519:合并两个排序的链表
- 九度OJ-题目1348:数组中的逆序对
- 九度OJ-题目1361:翻转单词顺序
- 九度OJ-题目1172:哈夫曼树-10计院上机D
- 九度OJ-题目1055 数组逆置
- 题目1043:Day of Week 九度OJ
- 【九度OJ】题目1201:二叉排序树