这篇博客只是本着不写白不写的想法写的,所以比较水qwq……
按题目说的做就好了。
#include
int n;
int main()
{
scanf("%d",&n);
if(n>=30)printf("Yes");
else printf("No");
}
判断一下每个点是否满足就好。
#include
#define ll long long
int n,ans=0;ll d;
int main()
{
scanf("%d %lld",&n,&d);
ll x,y;for(int i=1;i<=n;i++){
scanf("%lld %lld",&x,&y);
if(x*x+y*y<=d*d)ans++;
}printf("%d",ans);
}
模拟一下,找到循环节了就是无解。
#include
int k;
bool v[1000010];
int main()
{
scanf("%d",&k);
for(int i=1,now=7%k;;i++){
if(v[now])return printf("-1"),0;
if(!now)return printf("%d",i),0;
v[now]=true;now=now*10+7;now%=k;
}
}
将所有 W W W 放到后面就好了,只需要交换操作。
#include
int n,W=0;
char s[200010];
int main()
{
scanf("%d %s",&n,s+1);
for(int i=1;i<=n;i++)if(s[i]=='W')W++;
for(int i=n-W+1;i<=n;i++)if(s[i]=='W')W--;
printf("%d",W);
}
二分答案板子题。
#include
#define maxn 200010
#define ll long long
int n,a[maxn];ll m;
ll check(int x){
ll re=0;
for(int i=1;i<=n;i++)re+=a[i]/x+(a[i]%x>0)-1;
return re;
}
int main()
{
scanf("%d %lld",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
int l=1,r=1e9,mid,ans;
while(l<=r){
mid=l+r>>1;
if(check(mid)<=m)ans=mid,r=mid-1;
else l=mid+1;
}
printf("%d",ans);
}
原题,HH的项链。
#include
#include
using namespace std;
#define maxn 500010
int n,m,a[maxn];
struct que{int x,y,pos;}ask[maxn];
int last[maxn],ans[maxn];
int tr[maxn];
void add(int x,int y){for(;x<=maxn-5;x+=(x&-x))tr[x]+=y;}
void Add(int x,int y){add(x,1);add(y+1,-1);};
int sum(int x){int re=0;for(;x>=1;x-=(x&-x))re+=tr[x];return re;}
bool cmp(que x,que y){return x.y<y.y;}
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=m;i++)scanf("%d %d",&ask[i].x,&ask[i].y),ask[i].pos=i;
sort(ask+1,ask+m+1,cmp);
int now=1;for(int i=1;i<=n;i++){
Add(last[a[i]]+1,i);last[a[i]]=i;
while(now<=m&&ask[now].y==i)ans[ask[now].pos]=sum(ask[now].x),now++;
if(now>m)break;
}
for(int i=1;i<=m;i++)printf("%d\n",ans[i]);
}