• CF-补题1


    CF-补题1      

    1、CodeForces 735C    题意:n个人淘汰赛,两个人可以比赛的条件是:两人打过的场数之差绝对值<2。求冠军最多可以打多少场。  总结:看了题解,转换一下思路。求n个人最多打几场 -> 打x场最少要几个人。 要最少,则f[x]=f[x-1]+f[x-2](即和打了x-1场和x-2场的胜者打)。然后对n二分就行。   :很巧妙,变成fibonacci了。

    2、CodeForces 742D   题意:请客可容总量w,每个人量wi、魅力值bi。特殊在有朋友圈,同一朋友圈中人要么全来,要么只来一个。求最大魅力值。   总结:背包。但,要么来一个,不太好处理。不会

    3、CodeForces 743D   题意:圣诞树发奖,n个结点n-1条边连成树,通过结点1挂在墙上,两个人任取两个结点剪断所连边,要使掉下的结点权值和s1,s2相加最大。如s1,s2必须有重合结点,输出"Impossible"。  总结:不好判断是否有重合结点。不会

    4、CodeForces 745C   题意:n个点其中k个基点,一个连通分量中只有一个基点称为稳定图。给出m条已有边,问在保证稳定的前提下,最多可加几条边。  总结:并查集,往含有基点且结点最多的连通分量中加边即可,水。

    5、CodeForces 746C   题意:列车在0到s(s>=2)内走动,人可坐列车,车、人分别一米走t1,t2秒,问人从x1到x2最短时间。  总结:好坑的模拟题,WA了4发才过,还看了数据。有很多细节的地方,有时间再做一遍。  :用数组代替模拟的,感受更简单一点,但也有地方要注意。

    /*
    题目注意:不一定只在整数点坐上列车; s>=2; s,x1可以重合。
    */
    #include<bits/stdc++.h>
    using namespace std;
    #pragma comment(linker, "/STACK:102400000,102400000")
    #define F(i,a,b)  for (int i=a;i<b;i++)
    #define FF(i,a,b) for (int i=a;i<=b;i++)
    #define mes(a,b)  memset(a,b,sizeof(a))
    #define INF 0x3f3f3f3f
    typedef long long ll;
    const int N = 1e3+10;
    
    int ta[N],tb[N];    
    //ta[i]表示人到i点的时间,tb[i]表示列车到i点的时间,尤其注意列车可往返,故tb[i]会变
    //最后答案就是看ta[x2]和列车载人之后第一次到x2的时间ans,哪个小
    int main()
    {
        int s,x1,x2,t1,t2,p,d,d1;
        while(~scanf("%d%d%d", &s,&x1,&x2)) {
            scanf("%d%d%d%d", &t1,&t2,&p,&d);
            if(t1>=t2) { cout<<(abs(x1-x2)*t2)<<endl; continue; }
            x1<x2 ? d1=1 : d1=-1;
            for(int i=x1; ; i+=d1) {
                i==x1 ? ta[i]=0 : ta[i]=ta[i-d1]+t2;
                if(i==x2) break;
            }
            int flag=0,first=0,ans=INF;
            tb[p-d]=-t1;
            for(int i=p; ; i+=d) {
                tb[i]=tb[i-d]+t1;  //如开头要特判,注最好不要放到for循环外面,容易漏掉
                if(i==x1) flag=1;  //要判断人是否可坐上列车,只要看列车是否经过x1
                if(i==x2 && d==d1 && flag==1 && first==0) { first=1,ans=tb[i]; }
                if(tb[i]>=ta[x2]) break;
                if(i==0 || i==s) d=-d;
            }
            if(ta[x2]<=ans) cout<<ta[x2]<<endl;
            else cout<<ans<<endl;
        }
    
        return 0;
    }
    View Code

    6、CodeForces 746D   题意:a个G,b个B,一排输出,最多连续k个相同的,任意输出可能序列。  总结:水。但有个点傻了一下。  int a,k,b;(1至1e5)  if((a+1)*k<b) { puts("No"); }  注意:会爆int,(a+1)*k溢出。

    7、CodeForces 747C   好水的题,直接暴力过了。。好气啊,怎么当时比赛的时候就没过呢

    8、CodeForces 747D   题意:n天温度ti,ti<0必须用冬天轮胎,ti>=0夏天、冬天轮胎都可。一开始用夏天轮胎,结尾随便用哪种轮胎,问最少换几次轮胎。  总结:模拟题,记得综测时挂了一大片,好坑,有时间再做一遍

    //尤其注意,结尾随便用哪种轮胎都可
    #include<bits/stdc++.h>
    using namespace std;
    #pragma comment(linker, "/STACK:102400000,102400000")
    #define F(i,a,b)  for (int i=a;i<b;i++)
    #define FF(i,a,b) for (int i=a;i<=b;i++)
    #define mes(a,b)  memset(a,b,sizeof(a))
    #define INF 0x3f3f3f3f
    typedef long long ll;
    const int N = 2e5+10;
    
    int t[N],ns[N];
    int main()
    {
        int n,k,sum,ml,num,tot;
        while(~scanf("%d%d", &n,&k)) {
            ml=0, sum=0;
            FF(i,1,n) {
                scanf("%d", &t[i]);
                if(t[i]<0) sum++;
                if(t[i]<0 && ml==0) ml=i;
            }
            if(sum>k) { cout<<-1<<endl; continue; }
            if(ml==0) { cout<<0<<endl; continue; }
            tot=0;
            FF(i,ml+1,n) {
                if(t[i]>=0) {
                    if(t[i-1]<0) num=1;
                    else num++;
                }
                else {
                    if(t[i-1]>=0) ns[tot++]=num;
                }
            }
            k-=sum;
            int nsen=0, ans=tot*2+1;
            if(t[n]>=0) nsen=num, ans+=1;
            sort(ns,ns+tot);
            FF(i,0,tot-1) {
                if(k-ns[i]>=0) k-=ns[i], ans-=2;
                else break;
            }
            if(nsen>0 && k-nsen>=0) k-=nsen, ans-=1;
            cout<<ans<<endl;
        }
    
        return 0;
    }
    View Code

     9、CodeForces 749D 先空着

  • 相关阅读:
    什么造就一个伟大的站点
    我的一些关于商业计划书的经验
    iPhone开发:万能的NSData
    两种快速打乱NSMutableArray的方法
    交大校友:互联网大佬们
    程序员的十层楼 11层(上帝)
    iPhone开发:使用NSValue存储任意类型的数据
    Linux之lsof命令
    MySQL密码忘了怎么办?MySQL重置root密码方法
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address
  • 原文地址:https://www.cnblogs.com/sbfhy/p/6243500.html
Copyright © 2020-2023  润新知