AcWing 4485. 比大小
思路:
枚举即可,语法题
#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
#define x first
#define y second
#define LL long long
#define int LL
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define PII pair<int,int>
#define ll_INF 0x7f7f7f7f7f7f7f7f
#define INF 0x3f3f3f3f
#define debug(x) cerr << #x << ": " << x << endl
#define io ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
LL Mod(LL a,LL mod){return (a%mod+mod)%mod;}
LL lowbit(LL x){return x&-x;}//最低位1及其后面的0构成的数值
LL qmi(LL a,LL b,LL mod) {LL ans = 1; while(b){ if(b & 1) ans = ans * (a % mod) % mod; a = a % mod * (a % mod) % mod; b >>= 1;} return ans; }
int _;
int n;
void solve()
{
cin>>n;
int s1=0,s2=0;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
s1+=x;
}
for(int i=0;i<n;i++)
{
int x;
cin>>x;
s2+=x;
}
if(s1>=s2)puts("Yes");
else puts("No");
}
signed main()
{
io;
//cin>>_;
// while(_--)
solve();
return 0;
}
作者:Leimz
链接:https://www.acwing.com/activity/content/code/content/3669431/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
AcWing 4486. 数字操作
思路:
贪心的角度思考:只乘一次并且很顺利的除下去是操作数最小的,那么我们需要找到那个乘的数字。
对
n
n
n进行因式分解,
5184
=
2
6
∗
3
4
5184=2^6*3^4
5184=26∗34
将
6
,
4
6,4
6,4补成比他们大的最小的
2
2
2的次方也就是
8
8
8
那么给
5184
∗
2
2
∗
3
4
5184*2^2*3^4
5184∗22∗34,为什么是8?因为每次求算术平方根,相当于
指
数
/
2
指数/2
指数/2所以找的是2的次方
#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
#define x first
#define y second
#define LL long long
#define int LL
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define PII pair<int,int>
#define ll_INF 0x7f7f7f7f7f7f7f7f
#define INF 0x3f3f3f3f
#define debug(x) cerr << #x << ": " << x << endl
#define io ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
LL Mod(LL a,LL mod){return (a%mod+mod)%mod;}
LL lowbit(LL x){return x&-x;}//最低位1及其后面的0构成的数值
LL qmi(LL a,LL b,LL mod) {LL ans = 1; while(b){ if(b & 1) ans = ans * (a % mod) % mod; a = a % mod * (a % mod) % mod; b >>= 1;} return ans; }
int _;
int n;
vector<PII>v;
int maxv;
void get_fact()
{
for(int i=2;i<=n/i;i++)
{
if(n%i==0)
{
int s=0;
while(n%i==0)
{
n/=i;
s++;
}
maxv=max(maxv,s);
v.pb({i,s});
}
}
if(n>1)v.pb({n,1});
}
void solve()
{
cin>>n;
get_fact();
int s=1;
while(s<maxv)s<<=1;
bool f=false;
for(int i=0;i<v.size();i++)
{
if(v[i].y<s)
{
f=true;
break;
}
}
int res=f;
int m=s;
while(m)
{
res++;
m>>=1;
}
res--;
int ans=1;
for(int i=0;i<v.size();i++)
{
ans*=v[i].x;
}
cout<<ans<<' '<<res<<endl;
}
signed main()
{
io;
// cin>>_;
// while(_--)
solve();
return 0;
}
作者:Leimz
链接:https://www.acwing.com/activity/content/code/content/3669771/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
AcWing 4487. 最长连续子序列
思路:
首先对式子进行分析
相当于求一个最长区间的平均数并且除以100大于零
前缀和表示是
S
[
r
]
−
S
[
l
−
1
]
>
100
∗
(
l
e
n
)
S[r]-S[l-1]>100*(len)
S[r]−S[l−1]>100∗(len)
即:预处理
S
[
r
]
−
100
∗
r
S[r]-100*r
S[r]−100∗r
枚举左端点,找出最大的右端点,如果
r
<
l
r<l
r<l不符合,求最长的
l
e
n
len
len
这里的
m
x
mx
mx数组时进行二分的关键,因为前缀和数组不一定满足单调性,
m
x
mx
mx数组基于动态规划的思想,将
r
r
r之后的最大值复制给
r
r
r
同样此题可以用单调栈做。
#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
#define x first
#define y second
#define LL long long
#define int LL
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define PII pair<int,int>
#define ll_INF 0x7f7f7f7f7f7f7f7f
#define INF 0x3f3f3f3f
#define debug(x) cerr << #x << ": " << x << endl
#define io ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
LL Mod(LL a,LL mod){return (a%mod+mod)%mod;}
LL lowbit(LL x){return x&-x;}//最低位1及其后面的0构成的数值
LL qmi(LL a,LL b,LL mod) {LL ans = 1; while(b){ if(b & 1) ans = ans * (a % mod) % mod; a = a % mod * (a % mod) % mod; b >>= 1;} return ans; }
int _;
int n;
const int N=1e6+10;
int a[N];
int s[N],mx[N];
void solve()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)s[i]=s[i-1]+a[i];
for(int i=0;i<=n;i++)s[i]-=100*i;
mx[n+1]=-ll_INF;
for(int i=n;i>=0;i--)mx[i]=max(mx[i+1],s[i]);
int res=0;
for(int i=0;i<n;i++)
{
int l=i+1,r=n;
while(l<r)
{
int mid=l+r+1>>1;
if(mx[mid]>s[i])l=mid;
else r=mid-1;
}
if(mx[l]<=s[i])continue;
res=max(res,l-i);
}
cout<<res<<endl;
}
signed main()
{
io;
// cin>>_;
// while(_--)
solve();
return 0;
}
作者:Leimz
链接:https://www.acwing.com/activity/content/code/content/3670626/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。