ZJ25. 头条校招
描述
头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队,每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来,在选题之前,我们对题目进行了盲审,并定出了每道题的难度系统。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a,b,c,我们希望这3道题能满足下列条件:输入描述
输入的第一行包含一个整数n,表示目前已经出好的题目数量。输出描述
输出只包括一行,即所求的答案。示例1
输入:
4 20 35 23 40
输出:
2
C 解法, 执行用时: 4ms, 内存消耗: 440KB, 提交时间: 2021-06-27
#include<stdio.h> #define SCROE_SIZE 160 int main(int argc, char **argv) { int n; int scores[SCROE_SIZE] = {0}; int i,temp,j,sum; int add_count = 0; int split_index[5]; int bias_index[9] = {0}; int index = 0; int start = 1; scanf("%d", &n); for(i = 0; i < n; i ++ ) { scanf("%d", &temp); scores[temp] ++; } temp = 0; split_index[index ++] = 0; for(i = 1; i<SCROE_SIZE; i++) { if (scores[i] > 0) { if (i - temp > 20 && temp != 0) { split_index[index ++] = i; } else if (i - temp > 10 && i - temp <= 20 && temp != 0) { sum = 0; for (j = start; j < i; j ++) { sum += scores[j]; } if (sum % 3 != 0) { add_count ++; scores[temp + 10] ++; } else { start = i; } } temp = i; } } split_index[index] = SCROE_SIZE + 1; while (index) { temp = 0; for(i = split_index[index - 1]; i< split_index[index]; i++) { temp += scores[i]; } if (temp%3) { add_count += 3 - (temp%3); } index --; } printf("%d\n", add_count); return 0; }
C++ 解法, 执行用时: 5ms, 内存消耗: 424KB, 提交时间: 2021-12-31
#include<iostream> #include<cstring> using namespace std; int main(){ int num[201]; memset(&num, 0, sizeof(num)); int n,tmp,re=0; scanf("%d", &n); for(int i=0;i<n;i++){ scanf("%d",&tmp); num[tmp]++; } for(int i=1;i<201;i++){ if(num[i]==0) continue; num[i] = num[i]%3; if(num[i]>0){ bool find=false; for(int j=i+1;j<=i+10&&j<201; j++){ if(num[j]>0){ find = true; if(num[i]==1) num[j]++; else num[j]--; break; } } //cout<<find<<" "<<num[i]<<endl; if(!find){ re++; if(num[i]==1) num[i+10]=2; } } } cout<<re<<endl; }