#include<bits/stdc++.h>usingnamespace std ;constint maxn =100052;struct node{int val, deep, num;
node* next[10];node(){for(int i=0;i<10;i++){
next[i]=NULL;}
num =0;}node(int val,int deep){this->deep = deep;this->val = val;for(int i=0;i<10;i++){this->next[i]=NULL;}this->num =0;}};
node* root;voidinitTree(){
root =newnode(0,19);}voidinsertTree(vector<int>&x){
node* now = root ;for(int i=x.size()-1;i>=0;i--){
now->num++;if(now->next[x[i]]==NULL){
now->next[x[i]]=newnode(x[i],i);}
now = now->next[x[i]];}
now->num++;}longlongintqueryMax(vector<int>&x){longlongint ret =0;
node* now = root ;for(int i=x.size()-1; i>=0; i--){for(int j=9-x[i],k=0; k<10; k++,j--){// 从大到小枚举每一个出口if(j<0) j+=10;if(now->next[j]!=NULL){
now = now->next[j];int add =(x[i]+j)%10;
ret = ret *10+add ;break;}}}return ret;}longlongintqueryMin(vector<int>&x){longlongint ret =0;
node* now = root ;for(int i=x.size()-1; i>=0; i--){for(int j=10-x[i],k=0; k<10; k++,j++){// 从小到大枚举每一个出口if(j>=10) j-=10;if(now->next[j]!=NULL){
now = now->next[j];int add =(x[i]+j)%10;
ret = ret *10+add ;break;}}}return ret;}voidinsertTree(longlongint n){
vector<int> x;for(int i=0;i<=18;i++){
x.push_back(n%10);
n /=10;}insertTree(x);}longlongintqueryMax(longlongint n){
vector<int> x;for(int i=0;i<=18;i++){
x.push_back(n%10);
n /=10;}returnqueryMax(x);}longlongintqueryMin(longlongint n){
vector<int> x;for(int i=0;i<=18;i++){
x.push_back(n%10);
n /=10;}returnqueryMin(x);}intmain(){initTree();int n;scanf("%d",&n);longlongint ans_max =-1, ans_min =-1;for(int i=0;i<n;i++){longlongint temp;scanf("%lld",&temp);if(i!=0){longlongint temp_min, temp_max ;
temp_min =queryMin(temp);
temp_max =queryMax(temp);if(ans_max ==-1|| ans_max<temp_max){
ans_max = temp_max ;}if(ans_min ==-1|| ans_min>temp_min){
ans_min = temp_min ;}}insertTree(temp);//printf(" i = %d\n",i);}printf("%lld %lld\n", ans_min, ans_max);return0;}
Gym 101466B Maximum Tree
#include<bits/stdc++.h>usingnamespace std ;constint maxn =100052;longlongint ans =0;
vector<longlongint>a;intmain(){longlongint n;while(cin>>n){
a.clear();for(int i=0;i<n;i++){longlongint temp;scanf("%lld",&temp);
a.push_back(temp);}sort(a.begin(),a.end());longlongint mul =1, ans =1;for(int i=a.size()-1;i>=0;i--){
mul *= a[i];
ans += mul;}printf("%lld\n",ans);}return0;}
Gym 101466C Planet Communcation
#include<bits/stdc++.h>usingnamespace std ;constint maxn =5052;struct point{int x, y, z;point(){}point(int x,int y,int z){this->x = x;this->y = y;this->z = z;}};
vector <bool> vis;
vector <point> a;boolin_line(const point &a,const point &b,const point &c){return(longlongint)(a.x-b.x)*(b.y-c.y)==(longlongint)(a.y-b.y)*(b.x-c.x)&&(longlongint)(a.z-b.z)*(b.y-c.y)==(longlongint)(a.y-b.y)*(b.z-c.z)&&(longlongint)(a.z-b.z)*(b.x-c.x)==(longlongint)(a.x-b.x)*(b.z-c.z);}intmain(){int n;scanf("%d",&n);for(int i=0;i<n;i++){int temp_x, temp_y, temp_z;scanf("%d%d%d",&temp_x,&temp_y,&temp_z);
a.push_back(point(temp_x, temp_y, temp_z));
vis.push_back(0);}
vis[0]=1;int res = a.size()-1, ans =0;for(int i=1;i<a.size();i++){if(vis[i])continue;
vis[i]=true; res--; ans++;for(int j=i+1;j<n;j++){if(vis[j])continue;if(in_line(a[0],a[i],a[j])){
vis[j]=true;
res--;}if(res==0)break;}if(res==0)break;}printf("%d\n",ans);return0;}