[ NOIP 1998 ] TG
\(\\\)
\(\#A\) 车站
火车从第\(1\)站开出,上车的人数为\(a\),然后到达第\(2\)站,在第\(2\)站有人上、下车,但上、下车的人数相同,因此在第\(2\)站开出时(即在到达第\(3\)站之前)车上的人数保持为\(a\)人。从第\(3\)站起(包括第\(3\)站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到第\(n-1\)站,都满足此规律。
共有\(N\)个车站,始发站上车的人数为\(a\),最后一站下车的人数是\(m\)(全部下车),问\(x\)站开出时车上的人数。
- \(a,n,x\in [1,20]\),\(m\in [1,2000]\)
- 令\(fib_i\)表示第\(i\)项斐波那契数的值(从第一项开始),推推式子发现:
- 第一站和第三站上车\(a\)人
- 第二站增加\(0\)人,设上车\(b\)人
- 第四站增加\(b\)人
- \(5\text~n-1\)站中,第\(i\)站人数增量为\(fib_{i-4}-fib_{i-3}\)
- 暴力累加到第\(n-1\)项,回代求出\(b\),在退回到第\(x\)次即可。
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 30
#define R register
using namespace std;
int a,n,m,x;
int ax=2,ay,ansx,ansy,fib[N]={0,1,1};
int main(){
scanf("%d%d%d%d",&a,&n,&m,&x);
if(x<=2){printf("%d\n",a);return 0;}
if(x==3){printf("%d\n",2*a);return 0;}
for(R int i=3;i<N;++i) fib[i]=fib[i-1]+fib[i-2];
for(R int i=4;i<n;++i){
ax+=fib[i-4]; ay+=fib[i-3];
if(i==x) ansx=ax,ansy=ay;
}
m-=ax*a; m/=ay;
printf("%d\n",ansx*a+ansy*m);
return 0;
}
\(\\\)
\(\#B\) 拼数
设有\(N\)个正整数,将它们联接成一排,组成一个最大的多位整数。
- \(N\in [0,20]\)
- 按字典序排序所有串即可,巧妙地实现方式可以通过字符串相加比较大小。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
string s[50];
bool cmp(string a,string b){
return a+b>b+a;
}
int main(){
int n;
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];
printf("\n");
return 0;
}
\(\\\)
\(\# C\) 进制位
给出了如下的一张\(N\times N\)的加法表,表中的字母代表数字。 例如:
+ L K V E
L L K V E
K K V E KL
V V E KL KK
E E KL KK KV
试求出每一个字母所代表数字及运算的进制。
- \(N\in [0,9]\)
- \(9!=362880\),并不会超时,所以直接通过搜索枚举每一个字母所代表数字,最后暴力验证即可。
- 如果该表合法,则进制位必然为\(N-1\)进制,因为进位必定会产生\(1\),而\(1\)必定会累加出其他的数。
- 验证时注意进位不能在十进制下进位,需要模拟\(N-1\)进制的进位过程。
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 30
#define R register
#define gc getchar
using namespace std;
char s[N][N][N];
bool vis[N],use[N];
int n,m,q[N],trs[N],len[N][N];
inline bool check(){
for(R int i=1;i<n;++i)
for(R int j=1;j<n;++j){
int x=0,y=0,z=0;
for(R int k=0;k<len[0][j];++k) x=x*10+trs[s[0][j][k]-'A'+1];
for(R int k=0;k<len[i][0];++k) y=y*10+trs[s[i][0][k]-'A'+1];
while(x||y){
z=z*10+(x%10+y%10)%(n-1);
z+=((x%10+y%10)>=n-1)?10:0;
x/=10; y/=10;
}
x=z; z=0;
for(R int k=0;k<len[i][j];++k) z=z*10+trs[s[i][j][k]-'A'+1];
if(x!=z) return 0;
}
return 1;
}
inline bool dfs(int t){
if(t==q[0]+1){
if(check()){
for(R int i=1;i<n;++i)
printf("%c=%d ",s[0][i][0],trs[s[0][i][0]-'A'+1]);
printf("\n%d\n",n-1); return 1;
}
return 0;
}
for(R int i=0;i<n-1;++i)
if(!use[i]){
use[i]=1; trs[q[t]]=i;
if(dfs(t+1)) return 1;
use[i]=0; trs[q[t]]=0;
}
return 0;
}
int main(){
scanf("%d",&n);
for(R int i=0;i<n;++i)
for(R int j=0;j<n;++j){
scanf("%s",s[i][j]);
for(R int k=0;k<(int)strlen(s[i][j]);++k){
if(!isalpha(s[i][j][k])){len[i][j]=k;break;}
else vis[s[i][j][k]-'A'+1]=1;
}
if(!len[i][j]) len[i][j]=strlen(s[i][j]);
}
for(R int i=0;i<=27;++i) if(vis[i]) q[++q[0]]=i;
if(!dfs(1)) puts("ERROR!");
return 0;
}
[ NOIP 1998 ] TG的更多相关文章
- [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】
/*====================================================================== [NOIp 1998 提高组]Probelm 2 连接 ...
- [ NOIP 2014 ] TG
\(\\\) \(Day\ 1\) \(\\\) \(\#\ A\) \(Rps\) 定义五种方案的石头剪刀布游戏,两人共进行\(N\)局游戏,已知两人各自的循环节和具体方案,胜者得\(1\)分,败者 ...
- noip 1998 洛谷P1013 进制位
题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: L K V E L L K V E K K V E KL V V E KL KK E E K ...
- [ NOIP 2008 ] TG
\(\\\) \(\#A\) \(Word\) 给出一个长为\(N\)的小写字母串,判断出现所有字母中最多出现次数减最少出现次数得到的答案是否是质数. \(N\in [1,100]\) 直接按题意开桶 ...
- [ NOIP 2002 ] TG
\(\\\) \(\#A\) 均分纸牌 有\(N\)堆纸牌,每堆有若干张,但纸牌总数必为\(N\)的倍数.可以在任一堆上取若干张纸牌,然后移动给其左右任意一侧的纸牌堆,求将所有的牌堆牌数都变为平均值最 ...
- [ NOIP 2009 ] TG
\(\\\) \(\#A\) \(Spy\) 给出两个长度均为\(N\)相同的样例串,建立第一个串各个字符向第二个串对应位置字符的映射,并用映射转换给出的长度为\(M\)第三个串,输入保证只有大写字符 ...
- vijos 1772 巧妙填数
描述 将1,2,\cdots,91,2,⋯,9共99个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:31:2:3的比例. 试求出所有满足条件的三个三位数.例如:三个三位数192,384, ...
- 洛谷P1010 幂次方
题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137137可表示为: 2(7)+2(3)+2( ...
- 洛谷——V1772 巧妙填数
描述 将1,2,\cdots,91,2,⋯,9共99个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:31:2:3的比例. 试求出所有满足条件的三个三位数.例如:三个三位数192,384, ...
随机推荐
- Microsoft 根证书计划弃用 SHA-1 哈希算法
Microsoft 根证书计划弃用 SHA-1 哈希算法 微软官方2016年1月12日发布安全通报,自2016年1月1日起Microsoft 已经发布代码弃用变更,也就是说2016年1月1号后用SHA ...
- noip模拟赛 序
[问题背景]zhx 给他的妹子们排序.[问题描述]zhx 有 N 个妹子, 他对第 i 个妹子的好感度为 ai,且所有 ai两两不相等. 现 在 N 个妹子随意站成一排, 他要将她们根据好感度从小到大 ...
- Ajax提交post请求返回404错误
最近使用ajax提交表单的时候,发现无法执行success函数,后台的代码也正常执行了,但是就是无法执行success函数,执行error函数,返回的错误代码时404.显然是找不到请求的url. 可是 ...
- 洛谷——P1082 同余方程
P1082 同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输 ...
- Ubuntu 16.04使用NASM编译时用ld链接程序出现:i386 架构于输入文件 sandbox.o 与 i386:x86-64 输出不兼容(I386 architecture in the input file sandbox.o is not compatible with i386: x86-64 output)
错误: 问题解决过程: 1.先确定CPU的架构 2.这是以64位架构的CPU,如果使用elf参数时,默认是以32位模式去处理,那么此时需要更精确的去指定这个模式,比如elf32(32位),elf64( ...
- [A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 [B]System.Web.WebPages.Razor.Configuration.HostSection。
记录下mvc4升级到mvc5后,运行项目提示: “/”应用程序中的服务器错误. [A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转 ...
- 微信企业号开发:corpsecret究竟在哪块呢?
开发微信企业号,获取ACCESS_TOKEN是必须的,但怎样获取ACCESS_TOKEN呢? 获取access_token=ACCESS_TOKEN" style="text-de ...
- 走进windows编程的世界-----画图相关
Windows画图 1 图形绘制 1.1 图形绘制的方式 获取到画图句柄-设备描写叙述表(DC),使用对应的画图的API,在设备上绘制图形. 1.2 颜色 ...
- iOS截取视频某一帧图片(关键帧,AVAssetImageGenerator)
获取第一帧图片 导入 AVFoundation.Framework.CoreMedia.Framework 实现代码例如以下: + (UIImage*) thumbnailImageForVideo: ...
- VS2013大括号高亮显示的设置方法
在做公司一个项目的时候,需要用到VS2013编辑器,用了之后感觉有点不太爽. 在js文件里定义了方法之后,由于方法比较长,写完之后再回来看就有些不方便,尤其是方法里还有几个判断,后人再看的时候会有些不 ...