这题可能是我与正解里的最近的一次了,可以还是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. ubuntu下安装 nginx + php + memcached + mariadb

    一,apt-get 安装 1,安装nginx sudo apt-get install nginx 所有的配置文件都在/etc/nginx下,虚拟主机配置在/etc/nginx/sites-avail ...

  3. jQuery访问json文件(一个例子)

    保存网址 打开时 点开一个类型 当点开一个类型,其他类型隐藏 回到所有类型 没有错,左下角有个这是什么样子的图标 做到了什么: 1.从json文件中取得网址,并根据访问次数排列,放到前面: 2.就是1 ...

  4. Dynamics CRM 使用 Profiler 来做debug

    首先,我们需要install Profiler 我们选中一个plugin, 并且选择start Profilling 然后我们选择Persist to Entity 然后我们执行trigger这个pl ...

  5. Webstorm 破解2017.1 for Mac

    废话不多说,改了去年分享2016版本的文章,给同学们带来2017.1版本的Mac版本.(win版本网上很多,我这里就不贴出来了). 1.去官仿下载最新的版本  https://www.jetbrain ...

  6. 死磕itchat源码--content.py

    content.py中定义了接受消息的类型,即,用于注册消息函数时的参数类型.源码如下: TEXT = 'Text' MAP = 'Map' CARD = 'Card' NOTE = 'Note' S ...

  7. python指定日期后加几天判断

    #!/usr/bin/python import datetime import sys arg1_list=list(sys.argv[1].split(',')) arg2_list=list(s ...

  8. Oracle 知识积累

    1.oracle存储过程中is和as的区别 在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别,在视图(VIEW)中只能用AS不能用IS,在游标(CURSOR)中只能用IS不能用AS ...

  9. [USACO17JAN] Promotion Counting晋升者计数 (树状数组+dfs)

    题目大意:给你一棵树,求以某节点为根的子树中,权值大于该节点权值的节点数 本题考查dfs的性质 离散+树状数组求逆序对 先离散 我们发现,求逆序对时,某节点的兄弟节点会干扰答案 所以,我们在递推时统计 ...

  10. [luogu2216 HAOI2007] 理想的正方形 (2dST表 or 单调队列)

    题目描述 有一个ab的整数组成的矩阵,现请你从中找出一个nn的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至第a ...