Codeforces Round #367 (Div. 2)

紧跟别人训练(雾)!

我:我发现计科那边一天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\n",ans);
23 }
View Code

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 }
View Code

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 }
View Code

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 }
View Code

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 }
View Code

猜你喜欢

转载自www.cnblogs.com/MXang/p/10701808.html
今日推荐