NOIP1998提高组 题解报告
T1 进制位
题目大意:自己看吧
首先让我们来看两个引理:
- 如果有解,则进制一定为\(n - 1\)
- 如果有解,则字母一定表示\(0\) 至 \(n - 1\) 的数
证明如下:
因为有 \(n - 1\) 个不同的数,所以最少 \(n - 1\) 进制。
假设为 \(n\) 进制,那么一定有一个数没有出现,假设为 \(k\)。
若\(k = 0\) 或 \(k = 1\),有 \(1 + (n - 1) = 10\)(\(n\)进制下) ,矛盾。
\(1 < k \le n-1\) ,有\(1 + (k - 1) = k\) ,矛盾。
其它 $ > n - 1$ 进制的情况同理,所以一定是 \(n - 1\) 进制,结论 \(1\) 得证。
结论 \(1\) 成立 ,则结论 \(2\) 显然。
有了以上两个结论,这道题就好做多了。
数据范围才为 \(n \le 9\) ,直接枚举每种全排列,对每一种进行判断是否满足加法表就行了。
\(Code:\)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
int n,a[9],c[366666][9],tot,num[233],vis[233];
char cnm[9];
char ch[9][9][233];
inline int my_pow(int a,int b)
{
int cnm=1;
for(;b;b>>=1)
{
if(b&1) cnm=cnm*a;
a=a*a;
}
return cnm;
}
inline bool calc(int jz,int a,int b)
{
int A=num[(int)cnm[a]],B=num[(int)cnm[b]],C=0;
int siz=ch[a+1][b+1][0];
for(int i=1;i<=siz;++i)
C+=num[(int)ch[a+1][b+1][i]]*my_pow(jz,siz-i);
if(A+B<jz)
{
if(A+B==C) return true;
return false;
}
else
{
int temp=A+B;
B=temp%jz,A=temp/jz;
B+=A*jz;
if(B==C) return true;
return false;
}
}
inline void dfs(int k)
{
if(k==n-1)
{
++tot;
for(int i=0;i<n-1;++i) c[tot][i]=a[i];
return;
}
for(int i=0;i<n-1;++i)
{
if(!vis[i])
{
vis[i]=1;
a[k]=i,dfs(k+1);
vis[i]=0;
}
}
}
int main()
{
scanf("%d",&n);
getchar();//小心换行
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
{
scanf("%s",ch[i][j]+1);
ch[i][j][0]=strlen(ch[i][j]+1);
}
}
for(int i=1;i<n;++i) cnm[i-1]=ch[0][i][1];
dfs(0);
for(int i=1;i<=tot;++i)
{
int sum=0;
for(int j=0;j<n-1;++j) num[(int)cnm[j]]=c[i][j];
for(int j=0;j<n-1;++j)
{
for(int k=0;k<n-1;++k)
{
if(calc(n-1,j,k)) ++sum;
}
}
if(sum==(n-1)*(n-1))
{
for(int j=0;j<n-1;++j) printf("%c=%d ",cnm[j],c[i][j]);
puts("");
printf("%d\n",n-1);return 0;
}
}
puts("ERROR!");
return 0;
}
T2 拼数
题目大意:给你\(n\)个正整数,让你把它们重新排列,使得排列后形成的数最大。
水题,直接\(STL\)切掉
\(Code:\)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
int n;
string s[23];
inline bool cmp(string a,string b) {return a+b>b+a;}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i) cin>>s[i];
sort(s+1,s+n+1,cmp);
for(int i=1;i<=n;++i) cout<<s[i];
return 0;
}
T3 车站
题目大意:给你列车每一站上下车人数的规律以及终点人数,求第\(x\)站人数。
水的不能再水的题,直接上代码……
\(Code:\)
#include<cstdio>
using namespace std;
int f[23],n,m,a,x;
int main()
{
scanf("%d%d%d%d",&a,&n,&m,&x);
f[1]=1,f[2]=1;
for(int i=3;i<=n;++i) f[i]=f[i-1]+f[i-2];
if(x==1 || x==2) printf("%d",a);
else if(x==3) printf("%d",2*a);
else
{
int y=(m-a*(f[n-3]+1))/(f[n-2]-1);
printf("%d",y*(f[x-1]-1)+a*(f[x-2]+1));
}
return 0;
}
NOIP1998提高组 题解报告的更多相关文章
- NOIP1999提高组 题解报告
T1 导弹拦截 题目大意:依次有\(n\) (\(n \le 10^5\))枚导弹,一套导弹拦截系统只能拦截一系列高度递减的导弹(一套系统拦截的弹道不一定相邻).求一套系统最多能拦截多少导弹,以及最少 ...
- NOIP2014提高组 题解报告
D1 T1 无线网路发射器选址 题目大意:找一个矩形,使其覆盖的目标点最大. 题目过水,直接暴力搞过去,代码就不贴了. 但我TM居然有个地方SB了,调了半天才发现输入有问题: scanf(" ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- noip2010提高组题解
NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...
- NOIP 2014 提高组 题解
NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...
- NOIP 2001 提高组 题解
NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...
- NOIP 2000 提高组 题解
NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...
- 【NOIP2018】提高组题解
[NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕
- NOIP1998 提高组
[NOIP2002] 提高组 T2.联接数 算法:贪心+字符串处理 [问题分析]: 按整数对应的字符串大到小连接,因为题目的例子都符合,但是不难找到反例:12 121 应该组成12121而非121 ...
随机推荐
- 多进程,多线程,使用sqlalchemy 创建引擎(单例模式),闭包装饰器承载数据库会话,装饰模型类的类方法
python 多进程,多线程,使用 sqlalchemy 对数据库进行操作 创建引擎 & 获取数据库会话: 使用类的方式,然后在对象方法中去创建数据库引擎(使用单例,确保只创建一个对象,方法里 ...
- md5 helper
public static string ToMD5Hash(this string str) { if (string.IsNullOrEmpty(str)) return null; return ...
- 基于【 Docker】六 || 部署Harbor仓库
第一步:下载harbor二进制文件:https://github.com/goharbor/harbor/releases 第二步:安装 docker compose sudo curl -L htt ...
- jquery判断数据类型源码解读
var class2type = {}; ("Boolean Number String Function Array Date RegExp Object Error").spl ...
- 后台对象转JSON字符串传到前台,前台JSON字符串转对象绑定标签赋值
/// <summary> /// 创建换货单-自动获取对应的数据(后端) /// </summary> [HttpGet] public ActionResult GetPr ...
- 外网Telnet虚拟机,及nat配置等
环境整体是使用GNS3,通过cloud真实连接到虚拟机 cloud1 nginx主机 cloud2 nginx主机https连接 cloud3 Internet测试主机 下面贴每个网络设备配置,特别注 ...
- 投掷硬币(概率dp)
小Hi有一枚神奇的硬币.已知第i次投掷这枚硬币时,正面向上的概率是Pi. 现在小Hi想知道如果总共投掷N次,其中恰好M次正面向上的概率是多少. Input 第一行包含两个整数N和M. 第二行包含N个实 ...
- webpack 配置react脚手架(五):mobx
1. 配置项.使用mobx,因为语法时es6-next,所以先配置 .babelrc 文件 { "presets": [ ["es2015", { " ...
- 28-SQLServer带见证服务器的镜像搭建
一.注意点 1.数据库的模式要是完整模式. 2.要对数据库完整备份和事务日志备份,分别还原到镜像库上,使用NORECOVERY模式. 3.镜像数据库是不允许删除和操作,即便查看属性也不行. 4.先删除 ...
- TOMCAT上传下载文件
实现下载 修改server.xml修改web.xml 实现上传 实现客户端的上传post请求代码实现 实现服务端的处理 小结 实现下载 实现下载需要 - 修改Tomcat中的 ...