这题可能是我与正解里的最近的一次了,可以还是sb的把正解叉了。

正解其实比较显然:因为$f(x)$只有81个取值,所以我们可以枚举$f(x)$,然后计算$x$,再判断$x$是否可以转化为$f(x)$

刚开始以为一个$f(x)$会对应很多$x$,所以这么枚举是错的。

但实际上我们在枚举$f(x)$的时候并不关注$f(x)$与$x$的关系,因此我们可以直接把$f(x)$看做与$x$毫不相关的变量$y$

这样枚举出$y$对应的$x$后再判断$f(y)$是否等于$x$,这样就一定是对的了

// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=1e6+;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline int read()
{
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int ans[MAXN],tot;
int f(int a,int p)
{
int base=,ans=;
while(a) base+=a%,a/=;
for(int i=;i<=p;i++)
ans=ans*base;
return ans;
}
int a1[]={,,,,,,,,,,};
int a2[]={,,,};
int a3[]={,,,,,,,};
int a4[]={,,,,,,,};
int a5[]={,,,,,,};
int main()
{
int T=read();
while(T--)
{
int a=read(),b=read(),c=read(),k=read();
if(a==&&c==)
{
tot=;
//f(x)^a * b + c = x
k=min(k,(int)1e6);
for(int i=;i<=k;i++)
if(f(i,a) * b + c == i)
ans[++tot]=i;
if(tot==) {printf("0\n-1\n");continue;}
printf("%d\n",tot);
for(int i=;i<=tot;i++)
printf("%d ",ans[i]);puts("");
}
else if(b==&&c==)
{
if(a==)
{
int ans=;
for(int i=;i<=a1[];i++)
if(a1[i]<=k)
ans++;
if(ans==) {printf("0\n-1\n");continue;}
printf("%d\n",ans);
for(int i=;i<=ans;i++)
printf("%d ",a1[i]);printf("\n");
}
else if(a==)
{
int ans=;
for(int i=;i<=a2[];i++)
if(a2[i]<=k)
ans++;
if(ans==) {printf("0\n-1\n");continue;}
printf("%d\n",ans);
for(int i=;i<=ans;i++)
printf("%d ",a2[i]);printf("\n");
}
else if(a==)
{
int ans=;
for(int i=;i<=a3[];i++)
if(a3[i]<=k)
ans++;
if(ans==) {printf("0\n-1\n");continue;}
printf("%d\n",ans);
for(int i=;i<=ans;i++)
printf("%d ",a3[i]);printf("\n");
}
else if(a==)
{
int ans=;
for(int i=;i<=a4[];i++)
if(a4[i]<=k)
ans++;
if(ans==) {printf("0\n-1\n");continue;}
printf("%d\n",ans);
for(int i=;i<=ans;i++)
printf("%d ",a4[i]);printf("\n");
}
else if(a==)
{
int ans=;
for(int i=;i<=a5[];i++)
if(a5[i]<=k)
ans++;
if(ans==) {printf("0\n-1\n");continue;}
printf("%d\n",ans);
for(int i=;i<=ans;i++)
printf("%d ",a5[i]);printf("\n");
}
}
else
{
tot=;
//f(x)^a * b + c = x
for(int i=;i<=k;i++)
if(f(i,a) * b + c == i)
ans[++tot]=i;
if(tot==) {printf("0\n-1\n");continue;}
printf("%d\n",tot);
for(int i=;i<=tot;i++)
printf("%d ",ans[i]);puts("");
} }
return ;
}

80分暴力

// luogu-judger-enable-o2
#include<cstdio>
#include<algorithm>
#include<vector>
#define int long long
using namespace std;
const int MAXN=1e6+;
//#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
//char buf[1<<20],*p1=buf,*p2=buf;
inline int read()
{
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
vector<int>v;
int check(int x)
{
int base=;
while(x) base+=x%,x/=;
return base;
}
main()
{
int T=read();
while(T--)
{
int a=read(),b=read(),c=read(),k=read();
v.clear();
for(int i=;i<=;i++)
{
int x=i;
for(int j=;j<a;j++) x=x*i;
x=x*b+c;
if(x<||x>=k||check(x)!=i) continue;
v.push_back(x);
}
if(v.size()==) {printf("0\n-1\n");continue;}
printf("%d\n",v.size());
for(int i=;i<v.size();i++)
printf("%d ",v[i]);
printf("\n");
}
return ;
}

清北集训Day3T1(转换)的更多相关文章

  1. 清北集训Day6T1(生成函数)

    听rqy说可以用生成函数做,感觉比较有意思 我们考虑在DP转移的时候, $5,7,9$这三个数是没有限制的 因此他们出现的次数用01串表示的话就是$1111111111111111......$ $3 ...

  2. 清北集训Day1T3 LYK loves jumping(期望DP)

    题目描述 LYK在玩一个魔法游戏,叫做跳跃魔法. 有n个点,每个点有两个属性hi和ti,表示初始高度,和下降高度.也就是说,它初始时高度为hi,一旦LYK踩在这个点上,由于重力的影响,这个点的高度会下 ...

  3. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

  4. 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)

    清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...

  5. 清北Day 2

    清北第二天,感受到了来自这个世界的不友善,大概把没听过不会的"名词"记录下来就已经一面了,然后被大佬说这都是最基础的东西,就很皮,那就趁别人练习字符串的题的时候,来写波博客了,倒不 ...

  6. 清北Day4

    版权声明:如需转载请标明出处,未得到本人许可请勿转载. 今天就可以看到传说中的 数据结构 嘿嘿嘿嘿 都有什么呢 链表 队列 栈 st表 hash 线段树 树链剖分 一.栈: 放出来这个看烂了的图 值得 ...

  7. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

  8. 清明培训 清北学堂 DAY1

    今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1)   高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...

  9. 清北省选 DAY last 集锦

    这是题目描述的链接: http://lifecraft-mc.com/wp-content/uploads/2018/03/problems1.pdf (虽然这次没去清北,但还是厚颜无耻的做了一下这套 ...

随机推荐

  1. java json转义引号

    String jsonMapStr = "{\"system\":\"1,\\\"2\\\",3\",\"createD ...

  2. 参数转对象 类似 ?camera=1&travel=0&faceScore=1

    parseQueryString(url) { var obj = {}; var keyvalue = []; var key = "", value = "" ...

  3. php多线程操作数据库(转)

    PHP用pcntl可以实现多线程操作数据库.直接上代码,逻辑自己研究喽. 示例代码为: /** * 并发多线程运行任务,把任务拆解成区块,用多线程去并发执行 * @param callable $ex ...

  4. Dynamics CRM Online 快速的debug 方法

    这里的前提想大家了解一下.  Dynamics 365 online的产品的session是30分钟 timeout. 如果你logout之后, session还是会储存在服务器端不会release. ...

  5. 获取Centos7安装Docker各种姿势(指定版本)(转载)

    Centos7安装docker社区(CE)版 官网指导:https://docs.docker.com/engine/installation/linux/docker-ce/centos/#inst ...

  6. JS 封装一个判断闰年平年的方法 aa(nian)

    nn(2017) function nn (nian){ if(nian%4 == 0 && nian%100 !== 0 || nian%400 ==0 ) { alert(&quo ...

  7. Problem 2

    Problem 2 # Problem_2.py """ Each new term in the Fibonacci sequence is generated by ...

  8. 加速 MySQL 导入导出的方法

    http://www.21andy.com/new/20100917/1952.html MySQL导出的SQL语句在导入时有可能会非常非常慢,在处理百万级数据的时候,可能导入要花几小时.在导出时合理 ...

  9. BA-siemens-PXM液晶面板

    PXM面板作用:可以查看模块内部的信息,可以触发控制点来近程控制模块上的点位(非常便于现场调试). 优点:1.便于现场紧急控制,有些地方是必须要加上的,如工厂控制等项目,假如机器死机,可以通过面板切换 ...

  10. Java压缩和解压缩文件工具

    Java压缩和解压缩文件工具 学习了: https://www.oschina.net/code/snippet_1021818_48130 http://blog.csdn.net/gaowen_h ...