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

Codeforces Round #107 (Div. 2)-吐血记~~

阅读更多

地址 http://codeforces.com/contest/151

A:弱水题,分别求出三种食品分别用来提供几次toast,取最小值再除以人数即可,一点弯都不要转。

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
    int n,k,l,c,d,p,nl,np,a,b,cc;
    while(scanf("%d%d%d%d%d%d%d%d",&n,&k,&l,&c,&d,&p,&nl,&np)!=EOF){
        a=k*l;
        b=c*d;
        cc=p;
        a/=nl;
        cc/=np;
        cout<<min(a,min(b,cc))/n<<endl;
    }
    return 0;
}

 

B,字符串处理有点麻烦,不过不是太大的问题。最后标点符号的处理很蛋疼,需要先统计答案的个数。另外一个,比如当所有人都没有texi的电话号码时,居然是需要输出所有人的名字,因为他们这一项的最大值都等于0!!很多人都栽在这个上面了,我也犹豫了许久。最后侥幸1A。

 

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include <algorithm>
using namespace std;
const int inf=1<<28;
const int nMax=1005;
const int mMax=40000;

char name[101][101];
int has[101][3];
char phone[20];

int check(){
    if(phone[0]==phone[1]&&phone[1]==phone[3]&&phone[1]==phone[4]&&phone[1]==phone[6]&&phone[1]==phone[7]){   //texi
        return 0;
    }
    if(phone[0]>phone[1]&&phone[1]>phone[3]&&phone[3]>phone[4]&&phone[4]>phone[6]&&phone[6]>phone[7]){   //texi
        return 1;
    }
    return 2;
}

int maxx[3];
char ans[101][101];
int main(){
    int n,i,j,m,a,b,c;
    while(scanf("%d",&n)!=EOF){
        memset(maxx,0,sizeof(maxx));
        memset(has,0,sizeof(has));
        for(i=1;i<=n;i++){
            scanf("%d",&m);
            scanf("%s",name[i]);
            while(m--){
                scanf("%s",phone);
                a=check();
                has[i][a]++;
                maxx[a]=max(has[i][a],maxx[a]);
            }
        }
        int num=0;
        printf("If you want to call a taxi, you should call: ");
        for(i=1;i<=n;i++){
            if(has[i][0]==maxx[0]){
                strcpy(ans[num],name[i]);
                num++;
            }
        }
        for(i=0;i<num-1;i++){
            printf("%s, ",ans[i]);
        }printf("%s.\n",ans[num-1]);

        num=0;
        printf("If you want to order a pizza, you should call: ");
        for(i=1;i<=n;i++){
            if(has[i][1]==maxx[1]){
                strcpy(ans[num],name[i]);
                num++;
            }
        }
        for(i=0;i<num-1;i++){
            printf("%s, ",ans[i]);
        }printf("%s.\n",ans[num-1]);

        num=0;
        printf("If you want to go to a cafe with a wonderful girl, you should call: ");
        for(i=1;i<=n;i++){
            if(has[i][2]==maxx[2]){
                strcpy(ans[num],name[i]);
                num++;
            }
        }
        for(i=0;i<num-1;i++){
            printf("%s, ",ans[i]);
        }printf("%s.\n",ans[num-1]);

    }
    return 0;
}

 

一个小时完成上面两题,没想到的是接下来的一个小时居然爆零了,c题博弈完全没想法。D组合数学感觉能想出来,最后也想出来了,但是是TM的最后十分钟恍然大悟!!然后第二天早上马上交了上去ac。接下来说说D吧

 

给出三个数字n,m,k。求出存在多少中字符串,它的长度是n,字典大小是m(比如全部小写字母的单词的字典大小就是26).且他的每个长度为k的子串都是回文串。

其实这道题关键就在,无论字典的大小有多大,当k小于n时,一个字符串最多只能包含两种字符,否则不可能每个长度为k的子串都回文。其他的,再按照k和n的关系太讨论即可。很不明白为什么k会大于n。那道字符串的子串能大于这个字符串??wa在这个上面好几次……囧

 

 

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
    int n,m,k,i;
    long long ans;
    while(scanf("%d%d%d",&n,&m,&k)!=EOF){
        if(k==n){
            ans=1;
            for(i=0;i<(n+1)/2;i++){
                ans*=m;
                ans%=1000000007;
            }
            cout<<ans<<endl;
            continue;
        }
        if(k==1||k>n){
            ans=1;
            for(i=0;i<n;i++){
                ans*=m;
                ans%=1000000007;
            }
            cout<<ans<<endl;
            continue;
        }
        if(k&1){
            ans=m*(m-1)+m;
            ans%=1000000007;
            cout<<ans<<endl;
            continue;
        }
        cout<<m<<endl;
    }
    return 0;
}
0
1
分享到:
评论
2 楼 暴风雪 2012-02-19  
euyuil 写道
B 题我没有考虑某种电话没有的情况,也 AC 了。C 题其实是数论……欢迎交流:http://euyuil.com/3254/codeforces-round-107-div-2/

那道题,不是需要考虑,而是完全不需要考虑,考虑了就错了~
1 楼 euyuil 2012-02-19  
B 题我没有考虑某种电话没有的情况,也 AC 了。C 题其实是数论……欢迎交流:http://euyuil.com/3254/codeforces-round-107-div-2/

相关推荐

    Codeforces Round #723 (Div. 2).md

    Codeforces Round #723 (Div. 2).md

    Codeforces Round #629 (Div. 3) B. K-th Beautiful String

    长度为n的字符串包含n−2n−2n−2个aaa和222个bbb,求按照字典序排列输出第kkk个字符串 解题思路 第一个bbb在倒数第二位有1个字符串,在倒数第三位有2个字符串…在倒数第nnn位时有n−1n-1n−1个字符串 可以根据第一...

    Codeforces Round #630 (Div. 2) D. Walk on Matrix(构造)

    上面代码跑出来的dp[n][m]是0,然后从(1,1)(1,2)(2,2)(2,3)这样的相与值是k (看懂ans+k是啥应该就懂了) 代码: int main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); int ans=(1&...

    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 #628 (Div. 2) A~~D

    A #include using namespace std; typedef long long ll; int main(){ int t; cin&gt;&gt;t; while(t--){ ll x; cin&gt;&gt;x; cout&lt;&lt;1&gt;&gt;t; while(t--){ st.clear(); ll n; cin &gt;&gt;n;... ll re

    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 D1/D2. Prefix-Suffix Palindrome (Manacher) /详解

    D1. Prefix-Suffix Palindrome (Easy version) D2. Prefix-Suffix Palindrome (Hard version) 题意: ...很显然,这是一个O(n^2)时间复杂度的算法,那么还有哪里可以优化呢?其实关于求回文串palindrom

    Codeforces Round #628 (Div. 2)

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

    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 #...

    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) C.Ehab and Path-etic MEXs(树,思维)

    传送门 题意: 给一颗n个结点的数,然后n-1条边,我们要做的...如果不是一条链,那肯定有个结点的度大于等于3,把这个结点周围的三条边分别给值0,1,2,这样所有MEX(u,v)最大值为2,因为不可能有一条边同时经过0,1,2这三

    Codeforces Round #635 (Div. 2)D. Xenia and Colorful Gems

    传说门 刚好今晚是中国场! 其实这道题比较水,但当时思路错,一心想着化简公式,浪费了好多时间a....#pragma GCC optimize(2) #include #define ll long long #define endl '\n' using namespace std; const int manx=

    Codeforces Round #628 (Div. 2)【A B C D】

    传送门 A. EhAb AnD gCd 直接输出1,n-1即可 #include #include #include #include #include #include #include #include #include #include #define pb push_back #define lb lower_bound ...con

    Codeforces Round #627 (Div. 3) A. Yet Another Tetris Problem

    给一个长度为n的数组,两种操作,一个是把任意一个ai变成ai+2a_i变成a_i+2ai​变成ai​+2,另一个是如果所有数都大于0,可以把所有数减1,问通过这些操作能否把所有数变为0 思路: 如果任意两个数之差为奇数,那么就...

    Educational Codeforces Round 83 (Rated for Div. 2) D

    C(n-2,i-1)*C(j-1,n-2)*(i-1) __ j: n-1 -&gt; m 我们发现内层循环,每次只是j加一,我们就可以只用一次组合数剩下的用差量表示 对于外层循环同理 只有(i-1) * C(n-2,i-1) i会每次加一。我们也只算一次剩下的用差量...

    Codeforces Round #633 (Div. 2) A. Filling Diamonds(找规律)

    传送门 题意: 找规律,题意就是有多少种方式填充该图形 画两个就发现,输出n即可 代码: #include #include #include #include #include #include #include #include ...#define SZ(x) ((int)(x)

Global site tag (gtag.js) - Google Analytics