链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
众所周知一个程序的时间复杂度十分重要,评测机 1s 大概能做 10^8次简单运算,所以根据题目所提供的数据范围你就应该精心的策划好你所写程序应该具有的时间复杂度,而在数据范围变大时,想要在时限内完成同样的一个题目,你就不得不设计出一个更快更巧妙的程序,在本题中我们认定数据范围不一样的题目不是同样的题。
现在卡夫卡有一个包含 n 个不同题目的题集A ,其中第 i (1≤i≤n) 个题的数据范围为 10^ai ,也就是说第 i个题有 ai 个 0 ,数据保证 ai 两两不同。
现在他想从题集A里面选出一些题目,然后把选出的题目后面加 9 个 0 ,然后加入到一个新题集B里面,但是不能有原题,即这个题数据范围加 9个0 后的题不能在题集A里面有同样的题,请问卡夫卡所创造的新题集B里面最多能有多少个题。输入描述:
第一行包含一个整数 n (1≤n≤5×105) --- 表示题集A中的题目个数。 第二行包含 n 个整数 a1,a2,a3,...,an (1≤ai≤109) --- 表示每个题数据范围中 000 的个数,保证 个数互不相同。输出描述:
输出一行一个整数 --- 表示题集 B 中最多能有多少个题。示例1
9 11 4 5 14 1 9 19 8 10输出
复制6
6
双指针遍历,如果相减等于9,那么总数减1
#include <iostream> #include <algorithm> using namespace std; int n,s[1000000]; int main(){ scanf("%d",&n); int k=n; for(int i=1;i<=n;i++){ scanf("%d",&s[i]); } sort(s+1,s+n+1); for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(s[j]-s[i]>9){ break; } else if(s[j]-s[i]==9){ k--; } } } printf("%d",k); }