紧跟别人训练(雾)!
我:我发现计科那边一天vp一场。我觉得这很恐怖啊。
hmc:那为什么他们还这么菜。
我:因为是前天刚开始的。。。。。
A:身为一个计算几何选手不管什么时候都要写板子。
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 typedef double db; 5 struct point { 6 db x,y; 7 point operator -(const point &k1)const { 8 return {x-k1.x,y-k1.y}; 9 } 10 db abs(){return sqrt(x*x+y*y);} 11 db dis(point k1){return (*this-k1).abs();} 12 }; 13 point a,p;db f;int n; 14 int main(){ 15 scanf("%lf%lf",&a.x,&a.y); 16 scanf("%d",&n); 17 db ans = 1e18; 18 for(int i=1;i<=n;i++){ 19 scanf("%lf%lf%lf",&p.x,&p.y,&f); 20 ans = min(ans,p.dis(a)/f); 21 } 22 printf("%.11f ",ans); 23 }
B:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 typedef double db; 5 int n,a[100005],q,m; 6 int main(){ 7 ios::sync_with_stdio(false); 8 cin>>n; 9 for(int i=1;i<=n;i++)cin>>a[i]; 10 sort(a+1,a+1+n);; 11 cin>>q; 12 while (q--){ 13 cin>>m; 14 cout<<upper_bound(a,a+1+n,m)-a-1<<endl; 15 } 16 }
C:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 typedef double db; 5 int n,c[100005]; 6 string s[100005]; 7 ll dp[100005][2]; 8 int main(){ 9 ios::sync_with_stdio(false); 10 cin>>n; 11 for(int i=1;i<=n;i++)cin>>c[i]; 12 for(int i=1;i<=n;i++)cin>>s[i]; 13 for(int i=2;i<=n;i++)dp[i][0]=dp[i][1]=1e18; 14 dp[1][0]=0;dp[1][1]=c[1]; 15 for(int i=2;i<=n;i++){ 16 if(s[i]>=s[i-1])dp[i][0]=min(dp[i][0],dp[i-1][0]); 17 reverse(s[i].begin(),s[i].end()); 18 if(s[i]>=s[i-1])dp[i][1]=min(dp[i][1],dp[i-1][0]+c[i]); 19 reverse(s[i-1].begin(),s[i-1].end()); 20 if(s[i]>=s[i-1])dp[i][1]=min(dp[i][1],dp[i-1][1]+c[i]); 21 reverse(s[i].begin(),s[i].end()); 22 if(s[i]>=s[i-1])dp[i][0]=min(dp[i][0],dp[i-1][1]); 23 reverse(s[i-1].begin(),s[i-1].end()); 24 } 25 if(dp[n][1]==1e18&&dp[n][0]==1e18){ 26 cout<<-1; 27 }else{ 28 cout<<min(dp[n][1],dp[n][0]); 29 } 30 }
D:trie板子。
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int tree[5000000][2],tot,num[5000000]; 5 int insert(int a){ 6 int root = 0; 7 for(int i=31;i>=0;i--){ 8 int id = (a>>i)&1; 9 if(!tree[root][id]) 10 tree[root][id]=++tot; 11 root = tree[root][id]; 12 num[root]++; 13 } 14 } 15 int find(int a){ 16 int root=0,ans=0; 17 for(int i=31;i>=0;i--){ 18 int id = (a>>i)&1; 19 if(tree[root][id^1]&&num[tree[root][id^1]]>0) 20 ans|=(1<<i),root=tree[root][id^1]; 21 else 22 root=tree[root][id]; 23 24 } 25 return ans; 26 } 27 int del(int a){ 28 int root = 0; 29 for(int i=31;i>=0;i--){ 30 int id = (a>>i)&1; 31 num[tree[root][id]]--; 32 root = tree[root][id]; 33 } 34 } 35 int q;char op;int a; 36 int main(){ 37 ios::sync_with_stdio(false); 38 cin>>q; 39 insert(0); 40 while (q--){ 41 cin>>op>>a; 42 if(op=='+'){ 43 insert(a); 44 }else if(op=='-'){ 45 del(a); 46 }else{ 47 cout<<find(a)<<endl; 48 } 49 } 50 }
E:妙啊!我们用十字链表搞,维护下面的和右边的点。每次交换矩形就处理一下边界。妙啊!
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int n,m,q,a[1005][1005]; 5 struct Node{ 6 int d,r,val; 7 }node[1010005]; 8 int gps(int x,int y){ 9 int st = 0,stp=0; 10 while (stp++<y)st=node[st].r; 11 stp=0; 12 while (stp++<x)st=node[st].d; 13 return st; 14 } 15 void slove(int h){ 16 int st=0,stp=0; 17 while (stp++<h){ 18 st=node[st].d; 19 } 20 int w=0; 21 while (w++<m){ 22 st=node[st].r; 23 cout<<node[st].val<<' '; 24 } 25 cout<<endl; 26 } 27 int f[4],g[4]; 28 int main(){ 29 ios::sync_with_stdio(false); 30 cin>>n>>m>>q; 31 for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>a[i][j],node[i*(m+1)+j].val=a[i][j]; 32 for(int i=0;i<=n;i++){ 33 for(int j=0;j<=m;j++){ 34 node[i*(m+1)+j].d=(i+1)*(m+1)+j; 35 node[i*(m+1)+j].r=i*(m+1)+j+1; 36 } 37 } 38 int a,b,c,d,h,w; 39 while (q--){ 40 cin>>a>>b>>c>>d>>h>>w; 41 f[0]=gps(a-1,b); 42 f[1]=gps(a,b-1); 43 f[2]=gps(a,b+w-1); 44 f[3]=gps(a+h-1,b); 45 g[0]=gps(c-1,d); 46 g[1]=gps(c,d-1); 47 g[2]=gps(c,d+w-1); 48 g[3]=gps(c+h-1,d); 49 for(int i=0;i<h;i++){ 50 swap(node[f[1]].r,node[g[1]].r); 51 f[1]=node[f[1]].d,g[1]=node[g[1]].d; 52 swap(node[f[2]].r,node[g[2]].r); 53 f[2]=node[f[2]].d,g[2]=node[g[2]].d; 54 } 55 for(int i=0;i<w;i++){ 56 swap(node[f[0]].d,node[g[0]].d); 57 f[0]=node[f[0]].r,g[0]=node[g[0]].r; 58 swap(node[f[3]].d,node[g[3]].d); 59 f[3]=node[f[3]].r,g[3]=node[g[3]].r; 60 } 61 } 62 for(int i=1;i<=n;i++){ 63 slove(i); 64 } 65 }