zoukankan      html  css  js  c++  java
  • 101666

    痛苦死了,晚上降智严重。

    我以为这是个死群。(昨晚被拉的)

    哇我感觉我受到了很大的欺骗,

    #睡醒午觉看手机,大家全都在写题。

    哇结合“这也太紧凑了吧,昨天的题还没补完”,我瞬间脑补了一个 实验室众人已经连续好几个月保持每天x套题的高强度训练并且经常在群里讨论各种神仙题,而我却被蒙在鼓里还每天玩的很欢乐,大家的水平不知道高出我多少倍,一只手敲代码都吊打我,的场景。

    我都没赖床直接打开待做输入场号点击vp开始表演小品。

    算是第一个单切的四星场,水题不少,目前一共写了9个。打得太烂了,题面又长,又吃了个晚饭,M又看错题意自闭了一个多小时,导致好多题直接没看,,。

    话说计科那边竟然能9题了。。还是感觉很厉害的啊。同期学长也是9题的样纸。。欸不过我单切嘛qwq,况且发挥好其实能8题(强行解释)

    upd:九道题全tm水题,卧佛了,

    A:去年新生赛就做过还做出来了,本来也是个沙比题。。

     1 #include <bits/stdc++.h>
     2 #define pi 3.14159265358979323846
     3 typedef long long ll;
     4 using namespace std;
     5 const int N = 1e5+5;
     6 double n,m,r,sx,sy,ex,ey;
     7 int main(){
     8     //ios::sync_with_stdio(false);
     9     cin>>n>>m>>r>>sx>>sy>>ex>>ey;
    10     double a1=abs(ey-sy)/m*r;
    11     double a2=abs(sx-ex)/n*r*pi*min(sy,ey)/m;
    12     double ans1=a1+a2;
    13     double ans2 = (ey+sy)/m*r;
    14     double ans = min(ans1,ans2);
    15     printf("%.10f
    ",ans);
    16 }
    View Code

    C:沙比题直接暴力。当时一眼就直接暴力,结果有个地方写错了T了两发

     1 #include <bits/stdc++.h>
     2 typedef long long ll;
     3 using namespace std;
     4 const int N = 5e5+5;
     5 inline int read() {
     6     int X=0,w=1; char c=getchar();
     7     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
     8     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
     9     return X*w;
    10 }
    11 ll gcd(ll a,ll b){
    12     return b==0?a:gcd(b,a%b);
    13 }
    14 int n;ll a[N],b[N];int cnt=0;
    15 set<ll>s[N];
    16 int main(){
    17     n=read();
    18     for(int i=1;i<=n;i++) {
    19         scanf("%lld",&a[i]);
    20         if(a[i]!=a[i-1])
    21             b[cnt++]=a[i];
    22     }
    23     for(int i=cnt-1;i>=0;i--){
    24         ll tmp = b[i];
    25         s[i].insert(tmp);
    26         for(int j=i+1;j<cnt;j++){
    27             tmp = gcd(tmp,b[j]);
    28             if(s[j].count(tmp))
    29                 break;
    30             s[i].insert(tmp);
    31         }
    32     }
    33     set<ll>ans;ans.clear();
    34     for(int i=0;i<cnt;i++){
    35         for(auto t:s[i])
    36             ans.insert(t);
    37     }
    38     //printf("%d
    ",ans.size());
    39             cout<<ans.size()<<endl;
    40 }
    View Code

    D:dijkstra板子题。又没读懂题意读了好久好久。 到终点最短的那条路不能走。。。

    #include <bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    inline int read() {
        int X=0,w=1; char c=getchar();
        while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
        while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
        return X*w;
    }
    const int N = 1e5+5;
    struct Edge { int v,w,nxt; };
    Edge e[1000010];
    int head[200010],cnt=0;
    inline void addEdge(int u,int v,int w) {
        e[++cnt].v=v;
        e[cnt].w=w;
        e[cnt].nxt=head[u];
        head[u]=cnt;
    }
    int n,m,s=1;
    int dis[100010];
    struct node { //堆节点
        int u,d;
        bool operator <(const node& rhs) const {
            return d>rhs.d;
        }
    };
    void Dijkstra() {
        for (int i=0;i<n;i++) dis[i]=2147483647;
        dis[s]=0;
        priority_queue<node> Q; //
        Q.push((node){s,0});
        while (!Q.empty()) {
            node fr=Q.top(); Q.pop();
            int u=fr.u,d=fr.d;
            if (d>dis[u]) continue;
            for ( int i=head[u];i;i=e[i].nxt) {
                int v=e[i].v,w=e[i].w;
                if (dis[u]+w<dis[v]) {
                    dis[v]=dis[u]+w;
                    Q.push((node){v,dis[v]});
                }
            }
        }
    }
    int vis[N],ans[N];
    void dfs(int u,int id){
        vis[u]=1;
        ans[id]=u;
        if(u==1){
            cout<<id<<' ';
            for(int i=1;i<=id;i++)
                cout<<ans[i]<<' ';
            exit(0);
        }
        for(int i=head[u];i;i=e[i].nxt){
            int v=e[i].v,w=e[i].w;
            if(w+dis[v]==dis[u])
                continue;
            if(vis[v])continue;
            dfs(v,id+1);
        }
    }
    int main(){
        n=read();m=read();
        int x,y,z;
        while (m--){
            x=read();y=read();z=read();
            addEdge(x,y,z);addEdge(y,x,z);
        }
        Dijkstra();
        dfs(0,1);
        cout<<"impossible"<<endl;
    }
    View Code

    E:二分+二分图匹配。我比赛的时候又没时间看这道题啊。感觉好水啊,,,搜题解还搜到了同学的。。。还是人家去年暑假写的题解,,为什么我这么菜啊www,我纸币惹。

    显然二分距离然后加边,跑二分图匹配,显然如果一对 b,r 能匹配上那么这两个盒子我们就不能同时用吧,也就是说至多这两个 b,r 只能选一个。

    所以只要满足  b+r-匹配数>=n 就行了

     1 #include <bits/stdc++.h>
     2 #define db long double
     3 typedef long long ll;
     4 using namespace std;
     5 const int N = 1e5+5;
     6 struct Node{
     7     int x,y;
     8 }a[255],c[255];
     9 double d[255][255];
    10 double dis(int x,int y){
    11     return sqrt(abs(c[y].x-a[x].x)*abs(c[y].x-a[x].x)+abs(c[y].y-a[x].y)*abs(c[y].y-a[x].y));
    12 }
    13 int g[255][255];
    14 int linker[256],used[256];
    15 int n,b,r;
    16 bool dfs(int u){
    17     for(int v=1;v<=r;v++){
    18         if(g[u][v]&&!used[v]){
    19             used[v]=true;
    20             if(linker[v]==-1||dfs(linker[v])){
    21                 linker[v]=u;
    22                 return true;
    23             }
    24         }
    25     }
    26     return false;
    27 }
    28 int hungry(){
    29     int res=0;
    30     memset(linker,-1, sizeof(linker));
    31     for(int u=1;u<=b;u++){
    32         memset(used,0, sizeof(used));
    33         if(dfs(u))
    34             res++;
    35     }
    36     return res;
    37 
    38 }
    39 int check(double x){
    40     memset(g,0, sizeof(g));
    41     for(int i=1;i<=b;i++){
    42         for(int j=1;j<=r;j++) {
    43             if(d[i][j]<=x){
    44                 g[i][j]=1;
    45             }
    46         }
    47     }
    48     return b+r-n>=hungry();
    49 }
    50 int main(){
    51     ios::sync_with_stdio(false);
    52     cin>>n>>b>>r;
    53     for(int i=1;i<=b;i++){
    54         cin>>a[i].x>>a[i].y;
    55     }
    56     for(int i=1;i<=r;i++){
    57         cin>>c[i].x>>c[i].y;
    58     }
    59     for(int i=1;i<=b;i++){
    60         for(int j=1;j<=r;j++){
    61             d[i][j]=dis(i,j);
    62         }
    63     }
    64     double l=0,r=1e6;
    65     while (l+1e-9<r){
    66         double mid=(l+r)/2;
    67         if(check(mid)){
    68             l=mid;
    69         } else{
    70             r=mid;
    71         }
    72     }
    73     printf("%.9f",l);
    74 }
    View Code

    F:。。。

     1 #include <bits/stdc++.h>
     2 typedef long long ll;
     3 using namespace std;
     4 const int N = 1e5+5;
     5 int a[N],n;
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin>>n;
     9     int sum = 0;
    10     for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i];
    11     sort(a+1,a+1+n);
    12     reverse(a+1,a+1+n);
    13     int ans =0;
    14     for(int i=1;i<=n;i+=2){
    15         ans+=a[i];
    16     }
    17     cout<<ans<<' '<<sum-ans<<endl;
    18 }
    View Code

    I:。。。我纠结了四个小时题意。。这个南北东西都是什么啊。。。真实自闭。还有切的位置什么的。。。其实瞎猜就行(大雾

     1 #include <bits/stdc++.h>
     2 typedef long long ll;
     3 using namespace std;
     4 const int N = 1e5+5;
     5 int n,m;
     6 int main(){
     7     //cnm这题什么题意啊????
     8     ios::sync_with_stdio(false);
     9     cin>>n>>m;
    10     if(n&1){
    11         if(m&1){
    12             cout<<1;
    13         } else{
    14             if(n<m)
    15                 cout<<2;
    16             else
    17                 cout<<0;
    18         }
    19     } else{
    20         if(m&1){
    21             cout<<0;
    22         } else{
    23             cout<<0;
    24         }
    25     }
    26 }
    View Code

    K:我没做出来。不会搜索。不是这个题怎么可以这么傻逼啊,为什么我还不会啊。我怎么这么傻逼啊。一开始拓扑排序了一遍wa了就没啥思路了。。。

    bfs确实存在一些问题,比方说很多叉? dfs就保证是连续的?哎呀我神志不清。

     1 #include <bits/stdc++.h>
     2 typedef long long ll;
     3 using namespace std;
     4 const int N = 1e5+5;
     5 int n;char g[1005][1005];
     6 int vis[N],ans[N],cnt;
     7 void dfs(int now){
     8     vis[now]=1;
     9     ans[cnt++]=now;
    10     if(cnt==n){
    11         for(int i=cnt-1;i>=0;i--){
    12             cout<<ans[i]<<' ';
    13         }
    14         exit(0);
    15     }
    16     for(int i=1;i<n;i++){
    17         if(g[now][i]=='1'&&!vis[i]){
    18             dfs(i);
    19         }
    20     }
    21 }
    22 int main(){
    23     ios::sync_with_stdio(false);
    24     cin>>n;
    25     for(int i=0;i<n;i++){
    26         for(int j=0;j<n;j++){
    27             cin>>g[i][j];
    28         }
    29     }
    30     dfs(0);
    31     cout<<"impossible";
    32 }
    View Code

    L:卡精,所以我们取对数,也好像不卡?不知道。中间一度wa到自闭,刚才忽然想到取完对数之后可以小于0,然后我直接取的max。。。就是没有判断 count()。。。

    真自闭哇。话说 In 和 log 有什么区别么。。。

    #include <bits/stdc++.h>
    #define db long double
    typedef long long ll;
    using namespace std;
    const int N = 1e5+5;
    const db eps = 1e-15;
    int sign(db a){ return a<-eps?-1:a>eps;}
    int cmp(db a,db b){ return sign(a-b);}
    int n;string o,w;//...
    db _max(db a,db b){
        if(cmp(a,b)==1)return a;
        return b;
    }
    db x;
    map<string,db>mp;
    int main(){
        cin>>n;
        mp["pink"]=0.0;
        for(int i=1;i<=n;i++){
            cin>>o>>w>>x;
            db tmp = log(x);
            if(mp.count(w)) {
                if(mp.count(o))
                    mp[o] = _max(mp[o], mp[w] + tmp);
                else
                   mp[o] =  mp[w] + tmp;
            }
        }
        if(mp.count("blue")) {
            db ans = exp(mp["blue"]);
            if (ans-10>1e-8) {
                cout << 10 << endl;
            } else {
                cout << fixed << setprecision(15) << ans << endl;
            }
        } else
            cout<<0<<endl;
    }
    View Code

    M:绝世傻逼题,我写了一个半小时。一开始理解错了。。以为是那种树状数组维护的那种奇怪的东西。自闭。

    然后发现是个LIS,然后又自闭了,最后发现是cmp写错了。。。忘记第二维也要按顺序,反正我是自闭了。+16真是可喜可贺啊

     1 #include <bits/stdc++.h>
     2 typedef long long ll;
     3 using namespace std;
     4 const int N = 1e5+5;
     5 struct Node{
     6     int x,y;
     7 }node[N];
     8 bool cmp1(Node a,Node b){
     9     if(a.x==b.x) return a.y<b.y;
    10     return a.x<b.x;
    11 }
    12 bool cmp2(Node a,Node b){
    13     if(a.x==b.x) return a.y<b.y;
    14     return a.x>b.x;
    15 }
    16 int n,sx,sy,ex,ey;
    17 int a[N],cnt;
    18 int main(){//救命啊
    19     ios::sync_with_stdio(false);
    20     cin>>n>>sx>>sy>>ex>>ey;
    21     for(int i=1;i<=n;i++){
    22         cin>>node[i].x>>node[i].y;
    23     }
    24     if(sx>ex) {
    25         swap(sx, ex);
    26         swap(sy, ey);
    27     }
    28     if(sx<=ex&&sy<=ey){
    29         sort(node + 1, node + 1 + n, cmp1);
    30         for(int i=1;i<=n;i++){
    31             if(node[i].x<sx||node[i].x>ex)continue;
    32             if(node[i].y<sy||node[i].y>ey)continue;
    33             if(cnt==0||node[i].y>=a[cnt-1]){
    34                 a[cnt++]=node[i].y;
    35             } else{
    36                 int id = upper_bound(a,a+cnt,node[i].y)-a;
    37                 a[id]=node[i].y;
    38             }
    39         }
    40     } else if(sx<=ex&&sy>=ey){
    41         sort(node + 1, node + 1 + n, cmp2);
    42         for(int i=1;i<=n;i++){
    43             if(node[i].x<sx||node[i].x>ex)continue;
    44             if(node[i].y<ey||node[i].y>sy)continue;
    45             if(cnt==0||node[i].y>=a[cnt-1]){
    46                 a[cnt++]=node[i].y;
    47             } else{
    48                 int id = upper_bound(a,a+cnt,node[i].y)-a;
    49                 a[id]=node[i].y;
    50             }
    51         }
    52     }
    53     cout<<cnt<<endl;
    54 }
    View Code

    哦顺便嘲讽一下某紫名选手C题卡了三个多小时+7。喜闻乐见啊!

    要死了要死了睡觉睡觉。

  • 相关阅读:
    MinGW-编译器
    Enum , Enum Class ?
    C++编译器之间的不同性能
    交叉验证
    经验风险最小化-结构风险最小化
    图像卷积
    pytorch官网上两个例程
    ORB feature(O for orientation)
    Catalan数
    无责任共享 Coursera、Udacity 等课程视频(转载)
  • 原文地址:https://www.cnblogs.com/MXang/p/10367849.html
Copyright © 2011-2022 走看看