这题可能是我与正解里的最近的一次了,可以还是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. 安装typescript开发环境

    参考文档: http://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html 有两个方式 : 1.安装vs 2017,安 ...

  2. Wireshark抓包过滤

    主要说明下抓包前准备工作,及wireshark里面的两个过滤器:捕获过滤器和应用显示过滤器 1.捕获过滤器.顾名思义就是捕获时的过滤器.主要用来决定你要抓包抓哪个IP哪个端口,明确自己要抓哪个IP和端 ...

  3. vue2 阻止时间冒泡

    click.stop.prevent <div class="content-right" @click.stop.prevent="pay" > ...

  4. [Shell] echo/输出 中引用命令

    # 这样是错误的,是引用变量 echo "/Users/${whoami}/Desktop" >>> /Users//Desktop # 正确的写法应该是使用`` ...

  5. Java中数组的反转

    public class ArrayDemo2 { public static void main(String[] args) { //定义一个数组存放元素 int[] arr3 = {10, 20 ...

  6. day01_20181223

    今日内容大纲:1,python的出生于应用.2,Python的历史.    python2x:        源码冗余,源码重复,源码不规范.    python3x:源码清晰优美简单.       ...

  7. python tips: for循环的小问题

    在python中,用for对列表进行遍历的时候,迭代器中维护的是列表的索引而不是列表的元素.也就是说,for循环是对索引进行迭代,如果在for循环过程中修改了列表,迭代出来的值是新列表的索引位置,如果 ...

  8. PowerDesigner工具

    PowerDesigner是一款数据库设计与建模工具,开发人员可以在上面设计表结构,而不用一开始就创建数据库中的表,因为设计阶段数据库表结构会经常变动.设计完后可以导出创建所有表的SQL脚本,直接执行 ...

  9. sklearn学习1----sklearn.SVM.SVC

    1.SVM有两种作用:分类和回归,分类是用SVC,回归用SVR. 2.SVC:(中文官网) 重点在svm.SVC(),fit(X,Y),以及SVC中的参数. 3.SVC参数: ①C,C是控制软间隔中的 ...

  10. Python数据分析2------数据探索

    一.数据探索 数据探索的目的:及早发现数据的一些简单规律或特征 数据清洗的目的:留下可靠数据,避免脏数据的干扰. 两者没有严格的先后顺序,经常在一个阶段进行. 分为: (1)数据质量分析(跟数据清洗密 ...