做这样的比赛既考快速编码的能力,还有快速思维的能力。本人很弱,跌了rating。。加油!!!。。
第一题上来就把题意理解错了。。粗心啊。。直接模拟着做就行:1:如果字符串全是大写字母就进行大小写转换:2:如果除了第一个是小写字母其他都是大写字母就进行大小写转换:其他 原样输出。。
ct记录大写字母的个数。。
if(ct==len||(ct==len-1&&(str[0]>='a'&&str[0]<='z')))
第二题:我直接就是二了。题目中说的是-10---10结果我二处理成-9--9了。。悲剧啊。。。
记录每个数出现的个数:注意负数的处理,我是用一个结构体处理了。。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int const max_s = 107;
struct node
{__int64 flen,zlen;
}p[max_s];
int main()
{__int64 ans;int i,b,n;while(scanf("%d",&n)!=EOF){memset(p,0,sizeof(p));ans=0;for(i=0;i<n;i++){scanf("%d",&b);if(b>=0)p[b].zlen++;elsep[-b].flen++;}//for(i=0;i<=9;i++)//printf("%d %d %d\n",i,p[i].zlen,p[i].flen);for(i=0;i<=10;i++){if(p[i].zlen!=0){if(i==0){ans+=(p[i].zlen*(p[i].zlen-1))/2;//0的时候是c(n,2);}else{ans+=(p[i].zlen*p[i].flen);//不是0就是负数的个数*正数的个数}}}printf("%I64d\n",ans);}return 0;
}
第三题:才开始我用暴力做,结果Wa,最后听他们说是dp求组合数。。。我晕了, 哎自己的dp太弱了。然后暴力求姐
#include <iostream>
#include <cstdio>
using namespace std;
const int max_s = 35;
long long dp[max_s][max_s];
int n,m,t;
void init()//dp求解组合数(打表)
{int i,j;for(i=1;i<=30;i++){dp[i][i]=1;dp[i][1]=i;}for(i=2;i<=30;i++){for(j=2;j<=30;j++){if(j>i)break;dp[i][j]=dp[i-1][j-1]+dp[i-1][j];}}/*for(i=1;i<=10;i++){for(j=1;j<=10;j++)cout<<dp[i][j]<<" ";cout<<endl;}*/}
int main()
{int i;init();long long ans;while(~scanf("%d%d%d",&n,&m,&t)){ans=0;for(i=4;i<=n;i++){if(t-i>=1&&t-i<=m)ans+=dp[n][i]*dp[m][t-i];//主要公式。}cout<<ans<<endl;}return 0;
}