关闭

CF #309 (Div. 2)

标签: cf
134人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17867次
    • 积分:1094
    • 等级:
    • 排名:千里之外
    • 原创:93篇
    • 转载:0篇
    • 译文:0篇
    • 评论:9条
    最新评论
  • hdu 5536

    leohujx: @yskyskyer123:是的~我之前忽略了那个固定30次的循环,这样说来应该是这样的,多谢指点~

  • hdu 5536

    yskyskyer123: @leohujx:本人才疏学浅,后来我问了学长,自己也想了想,因为树的深度是32(算上根结点),而n...

  • hdu 5536

    leohujx: @yskyskyer123:你好,其实我并不清楚上限是多少,但是肯定没有您说的那么大,因为虽然数字可...

  • hdu 5536

    yskyskyer123: 请问那个结点上限#define M 100010是怎么算出来的pow(2,31)不是= 2 147 ...

  • hdu5355

    leohujx: @maxichu:不好意思哈,前几天没上博客,今天刚看到你的回复。我的理解是这样的:1.反过来看,不...

  • hdu5355

    maxichu: 不过还有两个问题希望兄台能够解答下呢、、一是为啥满足那两个条件就一定存在啊?感觉难以证明。。。二是为...

  • hdu5355

    maxichu: 好详细的解答,,一直再纠结为什么要4m-1。。。太感谢你啦~

  • hdu5335

    leohujx: @David_Jett:哈哈,谢谢你的夸奖,如果哪里有错还请指教~

  • hdu5335

    David_Jett: 良心博客啊,写博客就应该像博主这样!