码迷,mamicode.com
首页 > 其他好文 > 详细

gym 101858

时间:2019-03-09 23:55:58      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:为什么   cos   如何   back   print   owb   图片   转移   cin   

我这个傻逼被治了一下午。

大好的橘势,两个小时6T,去看L,哇傻逼题。然后我跑的最短路T到自闭  

最后十几分钟去想了下A,一直在想如何表示状态。。就是想不到二进制搞一下。。。

然后游戏结束了。。以后我就是蓝名之耻了。(注:此称号送给一场比赛里排名最低的蓝名选手)

所以非常凄惨到现在也只有8个,,我还想AK来着,,毕竟有紫名选手AK了,那我1800多分也差不多叭

注意:堆优化dijkstra的复杂度是mlogm!!!

注意:堆优化dijkstra的复杂度是mlogm!!!

注意:堆优化dijkstra的复杂度是mlogm!!!

A:貌似有奇怪的式子或者更佳的转移方式?

 

技术图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const ll mod = 1e9+7;
 5 ll f[2][8];
 6 int n;
 7 void init(){
 8     f[0^1][7]=1;
 9     int cnt=0;
10     while (cnt<n){
11         cnt++;
12         int i=cnt%2;
13         f[i^1][0]=f[i][7];
14 
15         f[i^1][1]=f[i][6];
16 
17         f[i^1][2]=f[i][5];
18 
19         f[i^1][3]=f[i][7]+f[i][4];
20 
21         f[i^1][4]=f[i][3];
22 
23         f[i^1][5]=f[i][2];
24 
25         f[i^1][6]=f[i][7]+f[i][1];
26 
27         f[i^1][7]=f[i][6]+f[i][3]+f[i][0];
28 
29         for(int j=0;j<=7;j++){
30             f[i^1][j]%=mod;
31         }
32     }
33 }
34 int main(){
35     ios::sync_with_stdio(false);
36     cin>>n;
37     init();
38     if(n&1){
39         cout<<min(f[0][7],f[1][7]);
40     } else{
41         cout<<max(f[0][7],f[1][7]);
42     }
43 }
View Code

 

B:

技术图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 string s;
 5 int main(){
 6     ios::sync_with_stdio(false);
 7     cin>>s;
 8     int nc=0,ns=0;
 9     for(int i=0;i<s.length();i++){
10         if(s[i]==C&&nc<2){
11             nc++;ns=0;
12             cout<<B;
13         } else if(s[i]==C&&nc==2){
14             cout<<P;
15             nc=0;ns=0;
16         } else if(s[i]==S&&ns<2){
17             ns++;cout<<D;nc=0;
18         } else{
19             ns=0;nc=0;cout<<T;
20         }
21     }
22 }
View Code

C:

D:

技术图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int n;ll s;
 5 int main(){
 6     ios::sync_with_stdio(false);
 7     cin>>n;
 8     while (n--){
 9         cin>>s;
10         ll l=0,r=15e8;
11         while (l<=r){
12             ll mid = l+r>>1;
13             if((mid+1)*mid/2<=s){
14                 l=mid+1;
15             } else {
16                 r=mid-1;
17             }
18         }
19         cout<<r<<endl;
20     }
21 }
View Code

E:

F:

技术图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N = 1e5+5;
 5 int n,m;
 6 struct Edge{
 7     int u,v;
 8 }e[N];
 9 int a[N],ans[N];
10 int fa[N];
11 int find(int x){
12     return x==fa[x]?x:fa[x]=find(fa[x]);
13 }
14 int main(){
15     ios::sync_with_stdio(false);
16     cin>>n>>m;
17     for(int i=1;i<=m;i++){
18         fa[i]=i;
19         cin>>e[i].v>>e[i].u;
20     }
21     for(int i=1;i<=m;i++){
22         cin>>a[i];
23     }
24     ans[m+1]=n;
25     for(int i=m;i>=1;i--){
26         int u=find(e[a[i]].u),v=find(e[a[i]].v);
27         if(u==v){
28             ans[i]=ans[i+1];
29         } else{
30             fa[u]=v;
31             ans[i]=ans[i+1]-1;
32         }
33     }
34     for(int i=2;i<=m+1;i++){
35         cout<<ans[i]<<endl;
36     }
37 }
View Code

G:

H:被坑了好久才反应过来

技术图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 double n,a,p;
 5 int main(){
 6     scanf("%lf%lf%lf",&n,&a,&p);
 7     p/=100;
 8     double x = p-(1-p);
 9     n+=a*x;
10     printf("%.10f\n",n);
11 }
View Code

I:判点在多边形内部板子

技术图片
#include <bits/stdc++.h>
using namespace std;
typedef double db;
const db eps=1e-6;
const db pi=acos(-1);
int sign(db k){
    if (k>eps) return 1; else if (k<-eps) return -1; return 0;
}
int cmp(db k1,db k2){return sign(k1-k2);}
int inmid(db k1,db k2,db k3){ return sign(k1-k3)*sign(k2-k3)<=0;}
struct point {
    db x,y;
    point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}
    point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}
    point operator * (db k1) const{return (point){x*k1,y*k1};}
    point operator / (db k1) const{return (point){x/k1,y/k1};}
    bool operator == (const point &k1) const{return cmp(x,k1.x)==0&&cmp(y,k1.y)==0;}
    db abs(){ return sqrt(x*x+y*y);}
    db abs2(){return x*x+y*y;}
    db dis(point k1){ return (*this-k1).abs();}
    bool operator<(const point &k1)const{
        int c = cmp(x,k1.x);
        if(c)return c==-1;
        return cmp(y,k1.y)==-1;
    }
};
int inmid(point k1,point k2,point k3){return inmid(k1.x,k2.x,k3.x)&&inmid(k1.y,k2.y,k3.y);}
db cross(point k1,point k2){ return k1.x*k2.y-k1.y*k2.x;}
int onS(point k1,point k2,point q){return inmid(k1,k2,q)&&sign(cross(k1-q,k2-k1))==0;}
db dot(point k1,point k2){ return k1.x*k2.x+k1.y*k2.y;}
vector<point> convexHull(vector<point> ps){
    int n = ps.size();if(n<=1)return ps;
    sort(ps.begin(),ps.end());
    vector<point> qs(n*2);int k = 0;
    for(int i=0;i<n;qs[k++]=ps[i++])
        while (k>1&&cross(qs[k-1]-qs[k-2],ps[i]-qs[k-2])<=0)--k;
    for(int i=n-2,t=k;i>=0;qs[k++]=ps[i--])
        while (k>t&&cross(qs[k-1]-qs[k-2],ps[i]-qs[k-2])<=0)--k;
    qs.resize(k-1);
    return qs;
}
int contain(vector<point>A,point q){//0外边
    int pd=0;A.push_back(A[0]);
    for(int i=1;i<A.size();i++){
        point u=A[i-1],v=A[i];
        if(onS(u,v,q))return 1;if (cmp(u.y,v.y)>0) swap(u,v);
        if(cmp(u.y,q.y)>=0||cmp(v.y,q.y)<0)continue;
        if(sign(cross(u-v,q-v))<0)pd^=1;
    }
    return pd<<1;
}
vector<point>p[5];
int s,r,m;
int n;
point tmp;
int main(){
    scanf("%d%d%d",&s,&r,&m);
    for(int i=1;i<=s;i++){
        scanf("%lf%lf",&tmp.x,&tmp.y);p[1].push_back(tmp);
    }
    for(int i=1;i<=r;i++){
        scanf("%lf%lf",&tmp.x,&tmp.y);p[2].push_back(tmp);
    }
    for(int i=1;i<=m;i++){
        scanf("%lf%lf",&tmp.x,&tmp.y);p[3].push_back(tmp);
    }
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lf%lf",&tmp.x,&tmp.y);
        if(contain(p[1],tmp)){
            printf("Sheena\n");
        } else if(contain(p[2],tmp)){
            printf("Rose\n");
        } else if(contain(p[3],tmp)){
            printf("Maria\n");
        } else{
            printf("Outside\n");
        }
    }
}
View Code

J:反着来维护区间和

技术图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N = 1e6+6;
 5 int n;
 6 int a[N],c[N];
 7 int lowbit(int k){ return k&-k;}
 8 void upd(int pos,int num){
 9     while (pos<=1e6+1){
10         c[pos]+=num;
11         pos+=lowbit(pos);
12     }
13 }
14 int sum(int pos){
15     int res = 0;
16     while (pos>0){
17         res+=c[pos];
18         pos-=lowbit(pos);
19     }
20     return res;
21 }
22 int ans[N];
23 int main(){
24     scanf("%d",&n);
25     for(int i=1;i<=n;i++){
26         cin>>a[i];a[i]++;
27         ans[i] = n-(i-1-sum(a[i]-1));
28         upd(a[i],1);
29     }
30     for(int i=1;i<=n;i++){
31         printf("%d\n",ans[i]);
32     }
33 }
View Code

K:

L:为什么这么傻逼的O(n)的做法我当时会想不到呢。。。

技术图片
 1 #include <bits/stdc++.h>
 2 #define pii pair<int,int>
 3 #define mk(a,b) make_pair(a,b)
 4 using namespace std;
 5 typedef long long ll;
 6 vector<int> g[100005];
 7 map<pii,int> mp;
 8 struct Node{
 9     int x,y;
10 }node[100005];
11 bool cmp(Node a,Node b){ return a.x<b.x;}
12 int n,l;
13 int dep[100005];
14 void dfs(int v){
15     for(int i=0;i<g[v].size();i++){
16         int u = g[v][i];
17         if(dep[v]+1>dep[u]) {
18             dep[u]=dep[v]+1;
19             dfs(u);
20         }
21     }
22 }
23 int main(){
24     scanf("%d%d",&n,&l);
25     node[1]={0,0};
26     mp[mk(0,0)]=0;
27     for(int i=1;i<=n;i++){
28         scanf("%d%d",&node[i].x,&node[i].y);
29     }
30     sort(node+1,node+1+n,cmp);
31     for(int i=1;i<=n;i++){
32         mp[mk(node[i].x,node[i].y)]=i;
33     }
34     node[n+1]={l,0};
35     mp[mk(l,0)]=n+1;
36     for(int i=0;i<=n;i++){
37         for(int j=1;j<=5;j++){
38             for(int k=-(5-j);k<=(5-j);k++){
39                 if(!mp.count(mk(node[i].x+j,node[i].y+k)))continue;
40                 if(abs(j)+abs(k)<=5){
41                     g[i].push_back(mp[mk(node[i].x+j,node[i].y+k)]);
42                 }
43             }
44         }
45     }
46     memset(dep,-0x3f, sizeof(dep));
47     dep[0]=0;
48     for(int i=0;i<=n;i++){
49         for(int j=0;j<g[i].size();j++){
50             int u = g[i][j];
51             dep[u]=max(dep[u],dep[i]+1);
52         }
53     }
54     printf("%d\n",dep[n+1]-1);
55 }
View Code

总结。打的太烂了。L被治了,A题好像也没带脑子。K看了两眼没兴趣,其他的没看。。。在两个小时以后就失去了生命迹象。。。

补题的话。如果下周四补了就是补了,否则应该就是不补了。。。(囤了好十几道题了我好慌啊!!!)

md等我过几天上紫了非得开教练模式爽一爽。越切越想要教练模式。。。

 

gym 101858

标签:为什么   cos   如何   back   print   owb   图片   转移   cin   

原文地址:https://www.cnblogs.com/MXang/p/10503381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!