这次的水题比赛颇有cf风格啊……
a题和c题做的时候想着抢首个ac,太慌张结果wa得根本划不来……以后还是不要太慌吧……
那么……一如既往地……题解时间到~
A Pasha and Stick
将一根长度为整数 n 的木棍切成四段(每段长度为整数),使得他们可以组成一个不是正方形的长方形,问有多少种切法。
知识:计数原理
注意:当长度为奇数时无论如何都没有满足题意的方案,需特殊判断。(因为debug的这几分钟丢了一个首个ac,反而多了罚时……)
#include <cstdio>
using namespace std;
int main(){
int n;
scanf("%d",&n);
printf("%d",(n%2)?0:(n/2-1)/2);
return 0;
}
B Vika and Squares
有个sb很会玩,他是万恶的有纸阶级的一员,他有一张由一行
思路:首先求出
{an}
的最小值
amin
,涂
n×amin
个格子应该不成问题,接下来能涂的格子数取决于开始的位置。
经验:不要局限于样例数据给出的情况(刚开始样例1让我以为是从最后一个最小值后面开始,结果wa了3次)。
#include <cstdio>
using namespace std;
#define NMAX 200000
int m[NMAX*2];
int main(){
int n;
int mi=2e9,mx=-1;
int i,j;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",m+i);
m[i+n]=m[i];
if(m[i]<=mi)mi=m[i];
}
for(i=0;i<n;i++){
if(m[i]==mi){
for(j=i+1;m[j]!=mi;j++);
if(j-i-1>mx)mx=j-i-1;
i=j-1;
}
}
printf("%I64d",mi*(long long)n+mx);
return 0;
}
C USB Flash Drives
有
n
个水槽,第
思想:贪心
注意:1.测完所有样例再提交 2.写程序的时候不要脑子里蹦出来什么就写上
#include <cstdio>
#include <algorithm>
using namespace std;
#define NMAX 100
int a[NMAX];
int main(){
int n,m;
int i;
scanf("%d",&n);
scanf("%d",&m);
for(i=0;i<n;i++)
scanf("%d",a+i);
sort(a,a+n);
for(i=n-1;i>=0;i--){
if(m<=a[i]){
printf("%d",n-i);
return 0;
}
m-=a[i];
}
return 0;
}
D The Best Gift
书店里有
知识:计数原理
注意:学好英语很重要……以及看清楚题用不着排列组合……
#include <cstdio>
using namespace std;
#define MMAX 10
int num[MMAX];
int main(){
int n,m;
int tmp;
int ans=0;
int i,j;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++){
scanf("%d",&tmp);
num[tmp-1]++;
}
for(i=0;i<m;i++){
for(j=i+1;j<m;j++){
ans+=num[i]*num[j];
}
}
printf("%d",ans);
return 0;
}
尾声
也没有什么好说的,做着新题目,还犯老毛病……