A.
1 #include <iostream> 2 #include<bits/stdc++.h> 3 #include <stack> 4 #include <queue> 5 #include <map> 6 #include <set> 7 #include <cstdio> 8 #include <cstring> 9 #include <algorithm> 10 #include <math.h> 11 using namespace std; 12 typedef long long ll; 13 typedef unsigned long long ull; 14 const int MAX=1e5+5; 15 int n; 16 int an=0,ans; 17 bool vi[MAX]; 18 int main() 19 { 20 scanf("%d",&n); 21 int tem; 22 ans=0; 23 for(int i=0;i<2*n;i++) 24 { 25 scanf("%d",&tem); 26 if(vi[tem]) 27 an--; 28 else 29 { 30 an++; 31 ans=max(an,ans); 32 vi[tem]=true; 33 } 34 35 } 36 printf("%d\n",ans); 37 }
B.
1 #include <iostream> 2 #include<bits/stdc++.h> 3 #include <stack> 4 #include <queue> 5 #include <map> 6 #include <set> 7 #include <cstdio> 8 #include <cstring> 9 #include <algorithm> 10 #include <math.h> 11 using namespace std; 12 typedef long long ll; 13 typedef unsigned long long ull; 14 const int MAX=6e4+5; 15 int n; 16 int lo[MAX],v[MAX]; 17 bool test(double t) 18 { 19 double zuo=0.0,you=(double)1e18; 20 double teml,temr; 21 for(int i=0;i<n;i++) 22 { 23 teml=(double)lo[i]-t*(double)v[i]; 24 temr=(double)lo[i]+t*(double)v[i]; 25 zuo=max(teml,zuo);you=min(you,temr); 26 if(zuo-you>0.0000001) 27 return false; 28 } 29 return true; 30 } 31 int main() 32 { 33 scanf("%d",&n); 34 for(int i=0;i<n;i++) 35 scanf("%d",&lo[i]); 36 for(int i=0;i<n;i++) 37 scanf("%d",&v[i]); 38 double l=0.0,r=1000000000.0,mid; 39 while(r-l>0.0000001) 40 { 41 mid=(l+r)/(double)2.0; 42 if(test(mid)) 43 r=mid; 44 else 45 l=mid; 46 } 47 printf("%.7f\n",mid); 48 49 50 }
二分,注意次数不能太多
C.
1 #include <iostream> 2 #include<bits/stdc++.h> 3 #include <stack> 4 #include <queue> 5 #include <map> 6 #include <set> 7 #include <cstdio> 8 #include <cstring> 9 #include <algorithm> 10 #include <math.h> 11 using namespace std; 12 typedef long long ll; 13 typedef unsigned long long ull; 14 const int MAX=2e5+5; 15 int col[MAX]; 16 vector <int> v[MAX]; 17 int n; 18 int x,y; 19 bool vi[MAX]; 20 int an=0; 21 int pos; 22 void dfs(int k,int t) 23 { 24 int lo; 25 int num=1; 26 for(int i=0;i<v[k].size();i++) 27 { 28 lo=v[k][i]; 29 if(!vi[lo]) 30 { 31 for(int s=num;s<=an;s++) 32 { 33 if(s!=col[k]&&s!=col[t]) 34 { 35 col[lo]=s; 36 num=s+1; 37 break; 38 } 39 } 40 vi[lo]=true; 41 dfs(lo,k); 42 } 43 } 44 v[k].clear(); 45 } 46 int main() 47 { 48 scanf("%d",&n); 49 for(int i=0;i<n-1;i++) 50 { 51 scanf("%d %d",&x,&y); 52 v[x].push_back(y); 53 v[y].push_back(x); 54 } 55 for(int i=1;i<=n;i++) 56 { 57 if(v[i].size()>=an) 58 { 59 pos=i; 60 an=v[i].size()+1; 61 } 62 } 63 printf("%d\n",an); 64 col[pos]=1; 65 vi[pos]=true; 66 dfs(pos,-1); 67 for(int i=1;i<=n;i++) 68 printf("%d ",col[i]); 69 printf("\n"); 70 }
关于树非常简单的染色问题。利用了树无环的性质。
D.
1 #include <iostream> 2 #include<bits/stdc++.h> 3 #include <stack> 4 #include <queue> 5 #include <map> 6 #include <set> 7 #include <cstdio> 8 #include <cstring> 9 #include <algorithm> 10 #include <math.h> 11 using namespace std; 12 typedef long long ll; 13 typedef unsigned long long ull; 14 const int MAX=1e3+5; 15 string a[MAX],b[MAX]; 16 set <string> re,ret; 17 string x,y; 18 int n; 19 int main() 20 { 21 cin>>n; 22 for(int i=0;i<n;i++) 23 { 24 cin>>x>>y; 25 a[i]=x.substr(0,3); 26 b[i]=x.substr(0,2)+y.substr(0,1); 27 if(re.count(a[i])) 28 ret.insert(a[i]); 29 re.insert(a[i]); 30 } 31 re.clear(); 32 for(int i=0;i<n;i++) 33 { 34 if(!re.count(b[i])) 35 { 36 a[i]=b[i]; 37 re.insert(b[i]); 38 } 39 else 40 { 41 if(ret.count(a[i])||re.count(a[i])) 42 { 43 printf("NO\n"); 44 return 0; 45 } 46 re.insert(a[i]); 47 } 48 } 49 printf("YES\n"); 50 for(int i=0;i<n;i++) 51 cout<<a[i]<<"\n"; 52 }
贪心
时间: 2024-10-07 16:22:53