简单判断
#include<cstdio>
int a[105];
int main(){
int n;
while(~scanf("%d",&n)){
int cnt=0;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
if(n%2==0||a[0]%2==0||a[n-1]%2==0)
printf("No\n");
if(n%2&&a[0]%2&&a[n-1]%2)
printf("Yes\n");
}
return 0;
}
斜率k是点1,2,3构成三种直线的其一斜率,然后寻找两条等斜率的基准点逐点判断
#include<cstdio>
const int N=1005;
int p[N];
int n;
bool work(double k){
int flag=0,next=-1;
for(int i=2;i<=n;i++){
if(p[i]-p[1]==k*(i-1)) continue; //1,i
flag=1; //other
if(next<0) next=i;
else if(p[i]-p[next]!=k*(i-next)){
flag=0;
break;
}
}
if(flag) return true;
else return false;
}
int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++)
scanf("%d",&p[i]);
double k1=1.0*(p[2]-p[1]); //1,2
double k2=0.5*(p[3]-p[1]); //1,3
double k3=1.0*(p[3]-p[2]); //2,3
if(work(k1)||work(k2)||work(k3))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
一个字符串中有n个a的话,那么对应这些字符a贡献的价值是:(n*(n-1))/2
#include<cstdio>
#include<cstring>
const int N=100;
int main(){
int n;
while(~scanf("%d",&n)){
int cost=0;
for(int i=1;i<=26;i++){
int pos=100;
for(int j=1;j<=N;j++){
if(cost+j*(j-1)/2>n){
pos=j-1;
break;
}
}
for(int k=1;k<=pos;k++)
printf("%c",i+'a'-1);
cost+=(pos-1)*pos/2;
if(cost==n) break;
}
printf("\n");
}
return 0;
}