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;
}

#309 (div.2) B. Ohana Cleans Up

1.题目描述:点击打开链接 2.解题思路:本题是一道简单的找最大值问题。只需要找出完全相同的行中个数那一行即可,输出它的个数。由于给定的范围比较小,可以直接用O(N^3)的算法解决。查找的时候用一个...

Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls

Kyoya Ootori has a bag with n colored balls that are colored with k different colors. The colors a...

C. Kyoya and Colored Balls(Codeforces Round #309 (Div. 2))

C. Kyoya and Colored Balls Kyoya Ootori has a bag with n colored balls that are colored with k diff...

Codeforces #309(div2)

从来没有写过博客,想想是该写点自己的博客了,但是并不知道该写点什么。 昨晚做的codeforces感觉还不错,排名排到自己的最好成绩div2第118名。 前面两题有点简单,就不多做说明,如果看了题目觉...

B. Ohana Cleans Up(Codeforces Round #309 (Div. 2))

B. Ohana Cleans Up   Ohana Matsumae is trying to clean a room, which is divided up into an...

Codeforces Round #309 (Div. 2) B. Ohana Cleans Up

time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandar...

CF题解DIV2

  • 2012年07月09日 14:38
  • 2KB
  • 下载

CF#275 (Div. 2) C(数学构造)

C. Diverse Permutation time limit per test 1 second memory limit per test 256 megabytes ...

cf#172div2 符合要求最近的分数

/* B题, 题意:给你x,y,n; a(a>=0),b(b

CF 141 Div2 C Fractal Detector(状态压缩DP)

C. Fractal Detector time limit per test 4 seconds memory limit per test 256 megabytes ...
  • fp_hzq
  • fp_hzq
  • 2012年10月23日 19:16
  • 830
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CF #309 (Div. 2)
举报原因:
原因补充:

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