A. Rainbow Dash, Fluttershy and Chess Coloring
画图,找规律发现结果为n/2+1
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define M 100
#define ll long long
using namespace std;
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
printf("%d\n",n/2+1);
}
}
B. Applejack and Storages
题目理解:用所给长度木条组成一个正方形和一个长方形(也可以是正方形)。
思路:先统计不同长度木板个数,并分为大于8,大于6,大于4,大于2(方便讨论最后是否能组成要求图形)用cnt[4]存放。
然后根据题目增减木条个数。先记录下来更改前木条对应的档次,将他减少,再记录更改后的档次,将他加一。(注意:注释中的flag=4,不能少,少了会个数小于二时flag默认为0,导致数据出错)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define M 100
#define ll long long
using namespace std;
const int N=1e5+5;
int a[N],b[N]; int cnt[4];
bool cmp(int a,int b){
return a>b;
}
int main(){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
a[x]++;
b[x]++;
}
sort(a+1,a+N,cmp);
for(int i=0;i<N;i++){
if(a[i]>=8) cnt[0]++;
else if(a[i]>=6) cnt[1]++;
else if(a[i]>=4) cnt[2]++;
else if(a[i]>=2) cnt[3]++;
}
int m;
scanf("%d",&m);
getchar();
while(m--){
char c; int flag,flag1;
int k;
scanf("%c %d",&c,&k);
if(c=='+'){
int num=b[k];
if(num>=8) flag=0;
else if(num>=6) flag=1;
else if(num>=4) flag=2;
else if(num>=2) flag=3;
else flag=4;//不能少
b[k]++;
if(b[k]>=8) flag1=0;
else if(b[k]>=6) flag1=1;
else if(b[k]>=4) flag1=2;
else if(b[k]>=2) flag1=3;
else flag1=4;//不能少
}
else{
int num=b[k];
if(num>=8) flag=0;
else if(num>=6) flag=1;
else if(num>=4) flag=2;
else if(num>=2) flag=3;
else flag=4;//不能少
b[k]--;
if(b[k]>=8) flag1=0;
else if(b[k]>=6) flag1=1;
else if(b[k]>=4) flag1=2;
else if(b[k]>=2) flag1=3;
else flag1=4; //不能少
}
if(flag>=0&&flag<4)cnt[flag]--;
if(flag1>=0&&flag1<4) cnt[flag1]++;
if(cnt[0]>0) printf("YES\n");
else if(cnt[1]>1||cnt[1]>0&&(cnt[2]>0||cnt[3]>0)) printf("YES\n");
else if(cnt[2]>=2||(cnt[2]>=1&&cnt[3]>=2)) printf("YES\n");
else printf("NO\n");
getchar();
}
}
C. Pinkie Pie Eats Patty-cakes
题目理解:给一串数字,存在相同的数据,使得两个相同数据间隔的最小值最大。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using namespace std;
const int N=2e5+5;
int a[N];
int main(){
int t;
scanf("%d",&t);
while(t--){
memset(a,0,sizeof(a));
int n,maxx=-1,cnt=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int k;
scanf("%d",&k);
a[k]++;
}
for(int i=1;i<=n;i++){
maxx=max(maxx,a[i]);
}
for(int i=1;i<=n;i++){
if(a[i]==maxx) cnt++;
}
// printf("ma=%d cnt=%d\n",maxx,cnt);
printf("%d\n",(n-maxx*cnt)/(maxx-1)+cnt-1);
}
}