BZOJ4292 : [PA2015]Równanie

注意到f(n)不会超过1459,于是暴力枚举f(n),检验n=k*f(n)是否合法即可。

#include<cstdio>
long long k,a,b,t;int i,j,ans;
int main(){
  scanf("%lld%lld%lld",&k,&a,&b);
  for(i=1;i<=1459&&k<=b/i;i++){
    t=k*i;
    if(a<=t&&t<=b){
      for(j=0;t;t/=10)j+=(t%10)*(t%10);
      if(j==i)ans++;
    }
  }
  return printf("%d",ans),0;
}

  

时间: 2024-10-26 14:20:44

BZOJ4292 : [PA2015]Równanie的相关文章

bzoj4292 PA2015 R&#243;wnanie 枚举

貌似应该是找出n后,带回去看看是不是对的. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6 7 #define ll long long 8 using namespace std; 9 typedef long long LL; 10 const int MAXN=9*9*18; 11 ll

BZOJ 4291: [PA2015]Kieszonkowe 水题

4291: [PA2015]Kieszonkowe Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=4291 Description 给定n个数,请从中选出若干个数,使得总和为偶数,请最大化这个总和. Input 第一行包含一个正整数n(1<=n<=1000000). 第二行包含n个正整数a_1,a_2,...,a_n(1<=a_i<=1000).

BZOJ 4292 R&#243;wnanie

枚举. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; long long k,a,b,ans=0; bool check(long long x,long long y) { if ((x<a) || (x>b)) return false; long long ret=0; while (x) { re

BZOJ4295 : [PA2015]Hazard

第i轮,a[i%n]+=b[i%m]. 枚举i,计算它变为0的次数,假设为t,那么有t=i+kn. 对于所有的i和k,(i+kn)%m形成了若干个总长度为m的环. 对于每个a[i],先在环中求出一轮最多可以减少多少,以及一轮的增量是多少,由此可以求出在几轮后变为0. 再在前缀后缀分类讨论一下即可求出具体是在哪一局变为0. 时间复杂度$O(n+m)$. #include<cstdio> #define N 1000010 typedef long long ll; const ll inf=20

bzoj 4291: [PA2015]Kieszonkowe

Description 给定n个数,请从中选出若干个数,使得总和为偶数,请最大化这个总和. Input 第一行包含一个正整数n(1<=n<=1000000). 第二行包含n个正整数a_1,a_2,...,a_n(1<=a_i<=1000). Output 输出一个正整数,即最大的总和,若无解则输出NIESTETY. Sample Input 5 2 4 3 3 3 Sample Output 12 解题:唔,总和减去最小的奇数 1 #include<iostream>

BZOJ4296 : [PA2015]Mistrzostwa

先不断将度数小于D的点都删去,再找到剩下的图里最大的连通块即可. #include<cstdio> #include<algorithm> #define N 200010 int n,m,D,x,y,i,g[N],v[N<<1],nxt[N<<1],ed,d[N],h,t,q[N],del[N],ans,fin[N]; inline void read(int&a){char c;while(!(((c=getchar())>='0')&am

BZOJ4607 : [PA2015 Final]Edycja

显然做完操作$2$后再做操作$1$. 建立一个$26$个点的有向图,每个点只有一条出边,$i$->$j$表示$i$最终变成了$j$,边权为一开始是$i$,最后不是$j$的位置个数,如果$i\neq j$,则代价还要增加$c$. 对于每个点贪心选取最小的出边,如果没有环,那么此时就是最优解. 否则,对于一个连通块,如果它是环,那么需要多付出$c$点代价,而且如果所有连通块都是环或者孤立点,则不可能构造出这种图. 考虑重新决定每个点的出边,如果出现了原来贪心构造出的图中不存在的环,那么一定有一个点的

【BZOJ】4293: [PA2015]Siano 线段树上二分

[题意]给定n棵高度初始为0的草,每天每棵草会长高a[i],m次收割,每次在d[i]天将所有>b[i]的草收割到b[i],求每次收割量.n<=500000. [算法]线段树上二分 [题解]按照生长速度a[]排序后,容易发现数列永远单调. 在线段树上的区间维护以下值: 1.最后一棵草的高度a 2.上次收割日期b 3.总的草高和c 4.总的生长速度和d 5.收割标记D和B 上传的时候注意右区间收割晚于左区间时强制合并. 下传的时候注意标记D和B直接覆盖. 线段树上二分: 1.判断当前区间是否符合(

BZOJ4293: [PA2015]Siano

发现大小顺序不变,因为都是从0开始长,生长速度快的肯定不会落后 所以排下序,二分就可以找到一段连续的需要cov的区间 1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #include<cstring> 5 #define INF 0x7f7f7f7f 6 #define MAXN 500010 7 #define rint register int 8 #define ll lon