CF #309 (Div. 2)

原创 2015年07月09日 14:42:05

A. Kyoya and Photobooks
题目大意就是给你一个字符串,让你在任意一个位置插入一个a-z的字母,问你一共有几种方法。
可以找规律,假设字符串长度为n,那么一共有n+1个位置可以任意插入26个字母,则26*(n+1),又因为其中有n个是重复的,比如在a前后插入一个小a后,为aa和aa,重复了一个。

#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<time.h>
#include<queue>
#include<stack>
#include<iterator>
#include<math.h>
#include<stdlib.h>
#include<limits.h>
#include<map>
//#define ONLINE_JUDGE
#define eps 1e-10
#define INF 0x7fffffff
#define inf 0x3f3f3f3f
#define FOR(i,a) for((i)=0;i<(a);(i)++)
#define MEM(a) (memset((a),0,sizeof(a)))
#define sfs(a) scanf("%s",a)
#define sf(a) scanf("%d",&a)
#define sfI(a) scanf("%I64d",&a)
#define pf(a) printf("%d\n",a)
#define pfI(a) printf("%I64d\n",a)
#define pfs(a) printf("%s\n",a)
#define sfd(a,b) scanf("%d%d",&a,&b)
#define sft(a,b,c)scanf("%d%d%d",&a,&b,&c)
#define for1(i,a,b) for(int i=(a);i<b;i++)
#define for2(i,a,b) for(int i=(a);i<=b;i++)
#define for3(i,a,b)for(int i=(b);i>=a;i--)
#define MEM1(a) memset(a,0,sizeof(a))
#define MEM2(a) memset(a,-1,sizeof(a))
#define ll __int64
const double PI=acos(-1.0);
template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
template<class T> inline T Min(T a,T b){return a<b?a:b;}
template<class T> inline T Max(T a,T b){return a>b?a:b;}
using namespace std;
int n,m;
#define N 200010
char ch[N];
int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
//  freopen("out.txt","w",stdout);
#endif
    int k;
    while(scanf("%s",ch)!=EOF){
        int len = strlen(ch);
        printf("%d\n",26*(len+1)-len);
    }
return 0;
}

B. Ohana Cleans Up
给你一个01矩阵,每次对一列进行操作,操作的结果是把0变为1,把1变为0。问你可以得到最多几个全为1的行。
这个其实仔细想想就明白了。。如果有两个全为1的行。。那么它们肯定本来就一模一样,,因为每次对列操作时会同时操作到这两个行,所以如果它们本来不一样,那么不可能操作完以后变成两个一模一样的全1行。。。。这个知道了以后就好办了。。直接暴力找下最多有几行是相同的。

#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<time.h>
#include<queue>
#include<stack>
#include<iterator>
#include<math.h>
#include<stdlib.h>
#include<limits.h>
#include<map>
//#define ONLINE_JUDGE
#define eps 1e-10
#define INF 0x7fffffff
#define inf 0x3f3f3f3f
#define FOR(i,a) for((i)=0;i<(a);(i)++)
#define MEM(a) (memset((a),0,sizeof(a)))
#define sfs(a) scanf("%s",a)
#define sf(a) scanf("%d",&a)
#define sfI(a) scanf("%I64d",&a)
#define pf(a) printf("%d\n",a)
#define pfI(a) printf("%I64d\n",a)
#define pfs(a) printf("%s\n",a)
#define sfd(a,b) scanf("%d%d",&a,&b)
#define sft(a,b,c)scanf("%d%d%d",&a,&b,&c)
#define for1(i,a,b) for(int i=(a);i<b;i++)
#define for2(i,a,b) for(int i=(a);i<=b;i++)
#define for3(i,a,b)for(int i=(b);i>=a;i--)
#define MEM1(a) memset(a,0,sizeof(a))
#define MEM2(a) memset(a,-1,sizeof(a))
#define ll __int64
const double PI=acos(-1.0);
template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
template<class T> inline T Min(T a,T b){return a<b?a:b;}
template<class T> inline T Max(T a,T b){return a>b?a:b;}
using namespace std;
int n,m;
#define N 200010
char ch[110][110];
int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
//  freopen("out.txt","w",stdout);
#endif
    int k;
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++)
            sfs(ch[i]);
        int ans=0;
        for(int i=0;i<n;i++){
            int res=1;
            for(int j=0;j<n;j++){
                int flag=1;
                if(j==i) continue;
                for(int k=0;k<n;k++){
                    if(ch[j][k] != ch[i][k]) {
                        flag=0;
                        break;
                    }
                }
                if(flag) res++;
            }
            ans = Max(ans,res);
        }
        printf("%d\n",ans);
    }
return 0;
}

C. Kyoya and Colored Balls
C题是数学题。。数学题不太会。理解了下别人的代码。
是个排列组合的题目,一共有k种颜色,涂满n个球,然后每种颜色有ci个球,题目中要求对于每种颜色的最后一个球,它一定要在下一种颜色最后一个球的前面。问这样的排列方法一共有几种。
逆着思考。我们先放大的,然后剩下的几个随便放。
比如2 2 2,那么我们就先放最后两个球中的一个,放好以后,还剩5个球,最后中的另外一个球就可以随便放。之后重复这个过程即可。那么公式就是c[sum-1][a[i]-1],sum是球的总数,a[i]是第i种颜色的球个数,我们倒着计算即可。

#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<time.h>
#include<queue>
#include<stack>
#include<iterator>
#include<math.h>
#include<stdlib.h>
#include<limits.h>
#include<map>
//#define ONLINE_JUDGE
#define eps 1e-10
#define INF 0x7fffffff
#define inf 0x3f3f3f3f
#define FOR(i,a) for((i)=0;i<(a);(i)++)
#define MEM(a) (memset((a),0,sizeof(a)))
#define sfs(a) scanf("%s",a)
#define sf(a) scanf("%d",&a)
#define sfI(a) scanf("%I64d",&a)
#define pf(a) printf("%d\n",a)
#define pfI(a) printf("%I64d\n",a)
#define pfs(a) printf("%s\n",a)
#define sfd(a,b) scanf("%d%d",&a,&b)
#define sft(a,b,c)scanf("%d%d%d",&a,&b,&c)
#define for1(i,a,b) for(int i=(a);i<b;i++)
#define for2(i,a,b) for(int i=(a);i<=b;i++)
#define for3(i,a,b)for(int i=(b);i>=a;i--)
#define MEM1(a) memset(a,0,sizeof(a))
#define MEM2(a) memset(a,-1,sizeof(a))
#define ll __int64
const double PI=acos(-1.0);
template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
template<class T> inline T Min(T a,T b){return a<b?a:b;}
template<class T> inline T Max(T a,T b){return a>b?a:b;}
using namespace std;
int n,m;
#define N 1010
#define Mod 1000000007
ll c[N][N];
void Init(){
    for(int i=0;i<N;i++){
        c[i][0] = 1;
    }
    for(int i=1;i<N;i++){
        for(int j=1;j<=i;j++){
            if(i == j)
                c[i][j] = 1%Mod;
            else
            c[i][j] = (c[i-1][j]+c[i-1][j-1])%Mod;
        }
    }
}
int a[N];
int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
//  freopen("out.txt","w",stdout);
#endif
    Init();
    while(scanf("%d",&n)!=EOF){
        int sum=0;
        for(int i=0;i<n;i++){
            sf(a[i]);
            sum += a[i];
        }
        ll ans=1;
        for(int i=n-1;i>=0;i--){
            ans = ans*c[sum-1][a[i]-1]%Mod;
            sum -= a[i];
        }
        printf("%I64d\n",ans);
    }
return 0;
}

CF-Codeforces Round #420 (Div. 2) A ~ E

ACM模版A-Okabe and Future Gadget Laboratory描述题解暴力搞搞,O(n4)O(n^4) 水过。代码#include #include using namespac...
  • f_zyj
  • f_zyj
  • 2017年06月27日 20:43
  • 246

Codeforces Round #280 (Div. 2) 解题报告(A B C D E)

A. Vanya and Cubes         思路:累加计算叠到每个高度至少需要多少方块,然后找最后一个满足的即可。 #include #include #include #i...
  • squee_spoon
  • squee_spoon
  • 2014年12月02日 19:35
  • 543

CF#256(Div.2) A. Rewards

题意就是Bizon the Champion这个人得了很多奖,有a1个一等奖奖杯,a2个二等奖奖杯,a3个三等奖奖杯;b1张一等奖奖状,b2张二等奖奖状,b3张三等奖奖状。现在给你n个柜子,问你是否能...
  • jiangX1994
  • jiangX1994
  • 2014年07月18日 08:42
  • 467

【打CF,学算法——三星级】CodeForces 689C Mike and Chocolate Thieves (二分)

题目链接:CF 689C 题面: C. Mike and Chocolate Thieves time limit per test 2 seconds memory limit ...
  • David_Jett
  • David_Jett
  • 2016年07月08日 10:55
  • 833

Codeforces Round #459 (Div. 2)The Monster[匹配问题]

C. The Monster time limit per test 1 second memory limit per test 256 megabytes input standard...
  • Haipai1998
  • Haipai1998
  • 2018年01月30日 15:20
  • 124

【解题报告】Codeforces Round #401 (Div. 2)

简略的解题报告。
  • TRiddle
  • TRiddle
  • 2017年02月25日 17:55
  • 409

Codeforces Round #258 (Div. 2)-(A,B,C,D,E)

A:Game With Sticks 水题。。。每次操作,都会拿走一个横行,一个竖行。 所以一共会操作min(横行,竖行)次。 #include #include #include #include ...
  • rowanhaoa
  • rowanhaoa
  • 2014年07月25日 14:39
  • 1470

Codeforces Round #309 (Div. 2)

B. Ohana Cleans Up time limit per test 2 seconds memory limit per test 256 megabytes inpu...
  • u010660276
  • u010660276
  • 2015年06月25日 23:48
  • 397

Codeforces Round #451 (Div. 2)题解

比赛时间2017 12 16 19:35-21:35。 结果+133rating。
  • s223568907
  • s223568907
  • 2017年12月17日 13:19
  • 75

Codeforces Round #395 (Div. 2)(ABCD)

ps:打完这场cf才知道自己真的很菜,还是停留在AB题的水平,有时候CD其实很简单,但就是想不到,别人一眼看出而我就是想不到,有时候想到了点子上但就是突破不了 题目链接:  Codeforc...
  • qq_34731703
  • qq_34731703
  • 2017年02月03日 12:50
  • 486
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CF #309 (Div. 2)
举报原因:
原因补充:

(最多只允许输入30个字)