水题
#include<bits/stdc++.h>
using namespace std;
int a[10]={0};
int main(){
int c;
for(int i=0;i<6;i++){
cin>>c;
a[c]++;
}
bool flag=false;
for(int i=1;i<=9;i++){
if(a[i]>=4) {
a[i]-=4;
flag=true;
}
}
if(!flag) cout<<"Alien\n";
else{
flag=false;
for(int i=1;i<=9;i++)
if(a[i]==2) flag=true;
if(flag) cout<<"Elephant\n";
else cout<<"Bear\n";
}
return 0;
}
只要难度相同的个数大于三个,或者存在至少两种难度的个数为2
如果某个难度相同的数大于等于有三个,那么可以正序、逆序、乱序(从第二个开始输出)
如果存在两种或以上难度的个数为2,将正序、逆序、一个正序其余逆序
#include<bits/stdc++.h>
using namespace std;
int n;
vector<int> a[2100];
int p[2100]={0};
int main(){
cin>>n;
int c;
for(int i=1;i<=n;i++){
cin>>c;
a[c].push_back(i);
}
int sum=1;
for(int i=1;i<=2000;i++){
if(a[i].size()>0)sum*=a[i].size();
if(sum>=3) break;
}
if(sum>=3){
cout<<"YES\n";
bool flag=false;
for(int i=0;i<=2000;i++){
for(int j=0;j<a[i].size();j++){
cout<<(flag?" ":"")<<a[i][j];
flag=true;
}
}
cout<<"\n";
flag=false;
for(int i=0;i<=2000;i++){
for(int j=a[i].size()-1;j>=0;j--){
cout<<(flag?" ":"")<<a[i][j];
flag=true;
}
}
cout<<"\n";
flag=false;
bool bb=false;
for(int i=0;i<=2000;i++){
if(bb==true||a[i].size()>2)
for(int j=1;j<a[i].size()+1;j++){
cout<<(flag?" ":"")<<a[i][j%(a[i].size())];
flag=true;
}
else{
if(a[i].size()==2) bb=true;
for(int j=0;j<a[i].size();j++){
cout<<(flag?" ":"")<<a[i][j];
flag=true;
}
}
}
cout<<"\n";
}
else{
cout<<"NO\n";
}
return 0;
}
题意:求n个木棒,可以搭成多少种不同高度的塔,n个木棒全部用完,
搭成 高度为 i 的塔,需要 d[i] 个木棒,剩余的木棒可以全部放在最底层 每多一个房间需要3个木棒
所以 (n - d[i]) % 3 == 0 ,那么用n个木棒就可以搭成高度为 i 的塔
d[i] = d[i - 1] + 3 * i -1;
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+100;
typedef long long ll;
ll n;
ll d[N];
int main(){
cin>>n;
d[0]=0;
for(int i=1;i<=(int)sqrt(n);i++){
d[i]=(ll)i*2+(ll)(i-1)+d[i-1];
}
int res=0;
for(int i=1;i<=(int)sqrt(n);i++){
if(n<d[i]) break;
ll tmp=n-d[i];
if(tmp%3==0) res++;
}
cout<<res<<"\n";
return 0;
}