做几道签到题去补作业了(逃)
A. 有用的算法
把题意翻译一下即可.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//#define lowbit(x) ((x)&-(x))
const int N=1e6+5;
int a[N];
int main() {
::sync_with_stdio(false);
iosint n;
>>n;
cinfor(int i=1;i<=n;i++)
>>a[i];
cinbool flag1=false,flag2=false;
for(int i=1;i<n;i++)
{
if(a[i+1]<a[i])
{
=true;
flag1break;
}
}
for(int i=1;i<=n;i++)
{
if(a[i+1]>a[i])
{
=true;
flag2break;
}
}
if(!flag1||!flag2)
<<"erfen is useful!"<<'\n';
coutelse
<<"bukeyi"<<'\n';
coutreturn 0;
}
B. 平衡数
翻译一下题面意思.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//#define lowbit(x) ((x)&-(x))
int main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
;
string s>>s;
cinif(s[0]+s[1]==s[2]+s[3])
<<"YES"<<'\n';
coutelse
<<"NO"<<'\n';
cout}
return 0;
}
C. 三角形
题目已经将初始条件极度简化了.
只需要
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//#define lowbit(x) ((x)&-(x))
int main() {
::sync_with_stdio(false);
iosint xb,xc,yc;
>>xb>>xc>>yc;
cinint xp,yp;
>>xp>>yp;
cinif(xc*yp<xp*yc&&(double)yp/(xp-xb)>(double)yc/(xc-xb))
<<"yes"<<'\n';
coutelse
<<"no"<<'\n';
coutreturn 0;
}
E. 减肥计划
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//#define lowbit(x) ((x)&-(x))
struct food
{
int x;
int y;
int z;
int w;
}f[15];
bool vis[15]={false};
int ans=0;
int an=0;
int n,a,b,c;
int a0,b0,c0;
void dfs(int x)
{
if(x>n||x<1||vis[x])
return;
if(f[x].x+a0>a||f[x].y+b0>b||f[x].z+c0>c)
{
=max(an,ans);
ansreturn;
}
[x]=true;
vis+=f[x].x;
a0+=f[x].y;
b0+=f[x].z;
c0+=f[x].w;
anfor(int i=1;i<=n;i++)
{
(i);
dfs}
-=f[x].x;
a0-=f[x].y;
b0-=f[x].z;
c0-=f[x].w;
an[x]=false;
vis}
int main() {
::sync_with_stdio(false);
ios>>n>>a>>b>>c;
cinfor(int i=1;i<=n;i++)
{
>>f[i].x>>f[i].y>>f[i].z>>f[i].w;
cin}
for(int i=1;i<=n;i++)
(i);
dfs<<ans<<'\n';
coutreturn 0;
}
F. 吃包子
用前缀和
从前往后扫描,如果一段区间内的素包子数小于
拓展到不能动了就移动区间头继续扫描.
发现继续扫描时并不需要移动区间另一头,复杂度差不多在
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//#define lowbit(x) ((x)&-(x))
const int N=1e6+5;
int a[N],cnt[N];
int main() {
::sync_with_stdio(false);
iosint n,m;
>>n>>m;
cinfor(int i=1;i<=n;i++)
{
>>a[i];
cin[i]=cnt[i-1]+!a[i];
cnt}
int ans=0;
for(int i=1,j=1;i<=n;i++)
{
while(j<=n&&cnt[j]-cnt[i-1]<=m)
{
=max(ans,j-i+1-cnt[j]+cnt[i-1]);
ans++;
j}
}
<<ans<<'\n';
coutreturn 0;
}