Codeforces Round #702 (Div. 3)
A Dense Array
这题就是给你数组,然后数组每两个的前后最大值和最小值的差值不能大于2,问如果不符合的话输出应该往里面插几个数
这题一开始还想着找找规律什么的,找什么等差等比,后来一看数据范围,好家伙,我直接暴力过
#include<bits/stdc++.h>
#define int long long
#define BUFF ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N=2e5+10;
const int INF=0x3f3f3f3f;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int a[N];
int judge(int xx,int yy)
{
int ans=0;
while(xx<yy)
{
ans++;
xx*=2;
}
ans--;
return ans;
}
signed main()
{
/*
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
*/
int T;
T=read();
while(T--)
{
int n;
n=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
}
int num=0;
for(int i=2;i<=n;i++)
{
int minn=min(a[i],a[i-1]);
int maxx=max(a[i],a[i-1]);
if(minn*2<maxx)
{
num+=judge(minn,maxx);
}
}
cout<<num<<endl;
}
return 0;
}
直接水过
B Balanced Remainders
说白了就是给你一个数组,让你统计出来里面有多少个模3等于0,1,2的
然后就发现其实就是跟以前的一种题类似,但是我不记得了,然后直接暴力模拟就行想一下那三堆的状态和模型
#include<bits/stdc++.h>
#define int long long
#define BUFF ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N=2e5+10;
const int INF=0x3f3f3f3f;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int a[N];
signed main()
{
int T;
T=read();
while(T--)
{
int n;
n=read();
int num1=0,num2=0,num3=0;
for(int i=1;i<=n;i++)
{
a[i]=read();
if(a[i]%3==0)num1++;
else if(a[i]%3==1)num2++;
else if(a[i]%3==2)num3++;
}
// cout<<num1<<" "<<num2<<" "<<num3<<endl;
if(num3==num2&&num3==num1)
{
cout<<"0"<<endl;
continue;
}
int sum=(num1+num2+num3)/3;
num1-=sum;
num2-=sum;
num3-=sum;
int res=0;
if(num1>0&&num2<=0&&num3<=0)
{
res+=num1+abs(num3);
}
else if(num2>0&&num1<=0&&num3<=0)
{
res+=num2+abs(num1);
}
else if(num3>0&&num1<=0&&num2<=0)
{
res+=num3+abs(num2);
}
else if(num1>=0&&num2>=0&&num3<0)
{
res+=num1*2+num2;
}
else if(num1>=0&&num3>=0&&num2<0)
{
res+=num1+num3*2;
}
else if(num1<0&&num3>=0&&num2>=0)
{
res+=2*num2+num3;
}
printf("%lld\n",res);
}
return 0;
}
C Sum of Cubes
这题就是给你个数,让你判断这个数能不能等于两个整数的立方相加,好家伙一开始我还去百度什么数学公式,后来发现了好家伙,我直接暴力莽过
#include<bits/stdc++.h>
#define int long long
#define BUFF ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N=2e5+10;
const int INF=0x3f3f3f3f;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
map<int,int>m;
signed main()
{
/*
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
*/
for(int i=1;i<=10000;i++)
{
m[i*i*i]=1;
}
int T;
T=read();
while(T--)
{
int n;
n=read();
bool flag=true;
for(int i=1;i<=10000;i++)
{
if(m[n-i*i*i])
{
printf("YES\n");
flag=false;
break;
}
}
if(flag)
{
printf("NO\n");
}
}
return 0;
}
这里之所以开到一万是因为一万的立方正好是题中所给的最大值十的十二次方,但是我一开始想的就是因为是相加嘛,我就对半,一面就是五×十的十一次方,然后这个开立方就是7938,但是这里面不能开到这里,为什么的话?
自己琢磨琢磨太晚了,我要碎觉
剩下的题补完再更
来自godhands