//看完题目10分钟就A出来了,结果载在第二题上
import java.util.Arrays;
import java.util.Scanner;
public class Main5 {
//先把数组排序 数相差大于10为界限 分成多个区
//每个区有三总情况:区的数量%3==0、1、2
//等于0的区不用加题目
//等于1的区加2个题目。x1:%3等于1的区的数量
//等于2的区加1个题目。x2:%3等于2的区的数量
//最后结果=x1*2+x2*1
public static int f(int[] arr){
Arrays.sort(arr);
int n = arr.length;
int j=1;
int x1=0;//%3等于1的区的数量
int x2=0;//%3等于2的区的数量
for (int i = 0; i < n-1; i++) {
if(arr[i+1]-arr[i]<=10){
j++;//计算每个区的数量
}else{
if(j%3==2){
x2++;
}
if(j%3==1){
x1++;
}
j=1;
}
}
if(j%3==2){
x2++;
}
if(j%3==1){
x1++;
}
return x1*2+x2*1;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i]=sc.nextInt();
}
System.out.println(f(arr));
}
}
import java.util.Arrays;
import java.util.Scanner;
/**
* 第一题AC.
*/
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while (in.hasNext()){
int n = in.nextInt();
int[] d = new int[n];
for (int i = 0; i < n; i++) {
d[i] = in.nextInt();
}
Arrays.sort(d);
int l = 1, add = 0;
for(int j=1;j<n;j++){
if(d[j]-d[j-1]>20){
if((j-l)%3!=0){
add+=(3-(j-l)%3);
l=j;
}
}
}
if((n-l+1)%3!=0)
add+=(3-(n-l+1)%3);
System.out.println(add);
}
}
}
头条第一题
第二题,trie树没搞出来 #include<iostream>
#include<vector> #include<algorithm> using namespace std;
int fun(vector<int> x){
sort(x.begin(),x.end());
int i; int sum = 0; int m = 0; for (i = 0; i < x.size()-1;i++){
if (x[i + 1] - x[i]>10){
x.insert(x.begin()+i+1,x[i]+10); sum++;
if ((i + 1) % 3 == 0) i++; }
}
if (x.size() % 3 == 0) return sum;
if (x.size() % 3 == 1) return sum + 2;
if (x.size() % 3 == 2) return sum + 1;
}
int main(){
int n; while (cin>>n){ int i;
vector<int> x; for (i = 0; i < n;i++){ int tmp;
cin >> tmp; x.push_back(tmp); } cout << fun(x)<<endl;
}
return 0;
}