`
暴风雪
  • 浏览: 390739 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

Codeforces Round #103 (Div. 2) 被虐记

阅读更多

第二次参加cf,饮恨两题了

 

A:大水,分别求出最高的人和最矮的人所在的位置。如果有多个人高度相同且都是最高的话要选靠左边的,有多个人高度相同且都是最矮的话要选靠右边的。然后计算把最高的人和最矮的人分别安排到左边和右边需要走的最短步数即可。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int nMax=105;
int num[nMax];
int main(){
    int n,i,j,high,low,h,l,ans;
    while(scanf("%d",&n)!=EOF){
        high=-1;
        low=200;
        for(i=1;i<=n;i++){
            scanf("%d",&num[i]);
            if(num[i]>high){   //大的数在左边
                high=num[i];
                h=i;
            }
            if(num[i]<=low){    //小的数字在右边
                low=num[i];
                l=i;
            }
        }
     //   cout<<high<<' '<<h<<" "<<low<<" "<<l<<endl;
        if(h<l){
            ans=h-1+n-l;
        }
        else{
            ans=h-1+n-l-1;
        }
        cout<<ans<<endl;
    }
    return 0;
}

B题代码实在太囧~~发出来怕被bs

 

 

C:这道本来应该能在最后精彩绝杀的题目却最终饮恨了~~这就叫惜哉剑术疏,奇功遂不成吧。

    大致题意就是:如果一个字符串a在打乱排列后可以变成另一个字符串b,则我们称a和b互为anagram,比如“aba”和“aab”就是互为anagram。“aab”和“abc”,“bba”都不互为anagram。

    如果有一个带‘?’的字符串a,在把‘?’替换成一些特定的字符后能和字符串b互为anagram,我们称a为good,比如a为“a??”,b为“abc”,则认为a是good。

    给出两个长度都是10^5数量级的字符串str1和str2,str1由小写字母和'?'组成,str2由小写字母组成。求出str1中可以分离出多少个good的连续子串。

    一开始看到10^5迟迟不敢下手,觉得会tle。后来下了好大决心才写了一个遍历长度为10^5字符串的代码。没想到却pass掉了。比赛测试总数据的时候很囧的被tle掉了。以为是有什么高级牛逼的算法,跟别人对比以后才发现字符串长度的定义少了一个0,杯具啊

 

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int nMax=105;
int cha1[300];
int cha2[300];
bool check(int l){
    int need=0;
    for(int i='a';i<='z';i++){
        if(cha1[i]>cha2[i]){
            return 0;
        }
        need=cha2[i]-cha1[i];
    }
    if(need==0)return 1;
    if(need==cha1['?'])return 1;
}
int main(){
    int i,j,len1,len2,ans;
    char str1[100005],str2[100005];   //这里这里这里!!
    while(scanf("%s%s",str1,str2)!=EOF){
        ans=0;
        memset(cha2,0,sizeof(cha2));
        memset(cha1,0,sizeof(cha1));
        len1=strlen(str1);            //长串
        len2=strlen(str2);            //短串
        if(len2>len1){
            cout<<0<<endl;
            continue;
        }
        for(i=0;i<len2;i++){
            cha1[str1[i]]++;
        }
        for(i=0;i<len2;i++){
            cha2[str2[i]]++;
        }
        for(i=len2-1;i<=len1-1;i++){   //str2尾部所在的位置
           // cout<<len2<<" "<<len1<<endl;
            if(check(i)){
                ans++;
            }
            cha1[str1[i-len2+1]]--;
            cha1[str1[i+1]]++;
        }
        cout<<ans<<endl;
    }
    return 0;
} 

 

D是个最短路好题!可惜等到赛后才ac掉~真囧。

    给出一个由n个点m条带权边组成的无向图。给出图中的一个点s和一个长度值l。求图中到s点最短距离为l的点的数量,包括节点上的点和边上的点。

    首先统计所有节点中距离s最短为l的点的个数,再统计所有边中含有那种点的个数,统计边的时候细节需要特别的注意!!最后输出总和即可。

献上代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
const int nMax=600050;
const int mMax=1000050;
const int inf=1<<28;
struct{
    int u,v, next;
    int  w;
}edge[mMax];
int n, k, head[nMax];
int dis[nMax];
int que[nMax],m,sum[nMax];
bool vis[nMax];

void addedge(int a,int b,int w){
    edge[k].w = w;
    edge[k].u=a;
    edge[k].v=b;
    edge[k].next=head[a];
    head[a]=k;k++;
}

void spfa(int s){      //始点,终点,总点数
    int i, hhead = 0, tail = 1;    //  长注释的地方就是从最小费用改到最大费用时需要变动的地方
    for(i = 0; i <= n; i ++){
        dis[i] = inf;////////////
        vis[i] = false;
    }
    dis[s] = 0;
    que[0] = s;
    vis[s] = true;
    while(hhead != tail){
        int u = que[hhead];
        vis[u] = false;
        for(i=head[u];i!=0;i=edge[i].next){//for(i = head[u]; i != 0; i = edge[i].next){
            int v = edge[i].v;
            if(dis[v] >dis[u] + edge[i].w){////////
                dis[v] = dis[u] + edge[i].w;
                if(!vis[v]){
                    vis[v] = true;
                    que[tail ++] = v;
                    if(tail == nMax) tail = 0;
                    //if(++sum[v] > n) return false;     //  不包含初始的进栈。
                }
            }
        }
        hhead++;
        if(hhead ==nMax) hhead = 0;
    }
}
int main(){
    int i,j,m,s,a,b,c,l,ans,u,v,w,p;
    char str[10];
    while(scanf("%d%d%d",&n,&m,&s)!=EOF){
        k=1;
        ans=0;
        memset(head,0,sizeof(head));
        while(m--){
            scanf("%d%d%d",&a,&b,&c);
            addedge(a,b,c);
            addedge(b,a,c);
        }
        scanf("%d",&l);
        spfa(s);
        for(i=1;i<=n;i++){
            if(dis[i]==l)ans++;
        }
        for(i=1;i<k;i+=2){
            u=edge[i].u;
            v=edge[i].v;
            w=edge[i].w;
            if(dis[u]<l){
                if(dis[u]+edge[i].w>l){
                    p=l-dis[u];
                    if(dis[v]+w-p>l){
                        ans++;
                    }
                }
            }
            if(dis[v]<l){
                if(dis[v]+edge[i].w>l){
                    p=l-dis[v];
                    if(dis[u]+w-p>l){
                        ans++;
                    }
                    if(dis[u]+w-p==l){
                        ans++;
                    }
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
 
分享到:
评论
2 楼 暴风雪 2012-01-26  
f12345 写道
膜拜,质的改变啊。

嘿嘿,不过这场打得真的很囧,话说你是?
1 楼 f12345 2012-01-26  
膜拜,质的改变啊。

相关推荐

    Codeforces Round #723 (Div. 2).md

    Codeforces Round #723 (Div. 2).md

    Codeforces Round 961 (Div. 2) 编程竞赛的详细解析

    codeforces round 961 (div. 2)

    Codeforces Round 961 (Div. 2):深度解析与实战技巧.pdf

    ### Codeforces Round 961 (Div. 2):深度解析与实战技巧 #### 引言 Codeforces 是一个国际知名的在线编程竞赛平台,它汇聚了来自世界各地的编程爱好者和专业人士。每一轮比赛都旨在测试参赛者的算法思维、编程...

    codeforces round 962 (div. 3)tion-ma笔记

    codeforces round 962 (div. 3)tion-ma笔记

    codeforces round 961 (div. 2)

    ### Codeforces Round 961 (Div. 2) A题解析 #### 题目背景 Codeforces Round 961 (Div. 2) 是一场针对中级水平程序员的编程竞赛,通常会包含几个不同难度级别的题目。A题作为入门级题目,旨在测试参赛者的基础算法...

    codeforces round 962 (div. 3).docx

    Codeforces Round 962 (Div. 3) 是一场编程竞赛,其中包含了多个编程题目,每个题目都有其独特的挑战和解题思路。以下是对该竞赛中部分题目的简要介绍及解题思路概述: A题: Legs 题意: 一只鸡有2条腿,一头奶牛有...

    codeforces round 962 (div. 3) .zip

    Codeforces Round 962 (Div. 3) 是一场编程竞赛,旨在测试参赛者在算法和数据结构方面的能力。由于篇幅限制,我将对这场竞赛中的几个关键问题进行详细解析,但请注意,由于具体实现细节可能因题目而异,且无法在此...

    Codeforces Round 964 (Div. 4).pdf

    A~G

    Codeforces Round #627 (Div. 3) C. Frog Jumps(思维)

    传送门 题意: 开始位置在0,问能否跳到n+1位置 每步只能跳d 在1——n每个位置有方向,L,R,求d的最小值 思路: 只用找相邻两个R之间的最大值即可 代码: #include #include ...typedef long long l

    Codeforces Round #627 (Div. 3) B. Yet Another Palindrome Problem

    就是把所有相等的数放到一个vector里,如果他出现大于2次,看最远的间距是否大于2即可,找到一个就可以 代码: #include #include #include #include #include #include #include #include #include #include #...

    Codeforces Round #479 (Div. 3) E. Cyclic Components

    E. Cyclic Components 题目链接-E. Cyclic Components 题目大意 给你nnn个点和mmm条边,求所构成图中单圈环的个数 ...并查集并查集并查集 很明显单圈环每个点的度都为222,所以我们可以用数组cnt[]记录每个点的度,...

    Codeforces Round 962

    Codeforces Round 962 (Div. 3) 编程竞赛 Codeforces Round 962 (Div. 3) 编程竞赛 Codeforces Round 962 (Div. 3) 编程竞赛 Codeforces Round 962 (Div. 3) 编程竞赛

    Codeforces Round #629 (Div. 3) E.Tree Queries (DFS)

    Codeforces Round #629 (Div. 3) E.Tree Queries (DFS) 思路:若ai 在路径上 ,则ai的父结点一定在路径上,若ai是路径上某个结点的子结点,则ai的父结点一定在路径上,综上只需考虑ai的父节点就行了。对每个ai判断...

    Codeforces Round #627 (Div. 3) D. Pair of Topics(二分,思维)

    ### Codeforces Round #627 (Div. 3) D. Pair of Topics(二分,思维) #### 题目背景与概述 本题目来自Codeforces Round #627 (Div. 3),编号为D的题目“Pair of Topics”,这是一道结合了二分搜索与逻辑思维的...

    Codeforces Round #618 (Div. 2) C. Anu Has a Function(进制,位运算,贪心)

    题目“Anu Has a Function”源自Codeforces Round #618 (Div. 2)的一道竞赛编程问题,主要涉及进制转换、位运算和贪心算法。问题要求定义一个函数f(x, y) = (x | y) - y,并对数组进行排序,以最大化最后的结果。 ...

    Codeforces Round #629 (Div. 3) E – Tree Queries dfs序判祖先关系

    标题中的"Codeforces Round #629 (Div. 3) E – Tree Queries dfs序判祖先关系"指的是一场编程竞赛中的问题,涉及到树结构的查询和深度优先搜索(DFS)来判断节点间的祖先关系。这个问题的目标是设计算法来确定在...

    Codeforces Round #628 (Div. 2)

    给两两节点放一个数字(0~n-2 唯一) 给你一棵树,求所有任意两节点相连的路以外的路上的数字的最小值最小 思路 构造 若一个点连了三条边及以上,则这个点的边从最小值开始赋值。其他边从最大点开始赋值。 证明:一...

    Codeforces Round #620 (Div. 2) Longest Palindrome

    B. Longest Palindrome time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Returning back to problem solving, Gildong is now studying about ...

    Codeforces Round #628 (Div. 2) A. EhAb AnD gCd

    输入一个正整数x,找出这样的2个正整数a和b,使得gcd(a,b)+lcm(a,b)=x 解题思路 找最特殊的情况a=1,b=x-1即可 这样a,b两个数最大公因数为1,最小公倍数x-1,满足题意√ 附上代码 #include #define int long long #...

Global site tag (gtag.js) - Google Analytics