Codeforces 1144 E. Median String

原题链接:https://codeforces.com/problemset/problem/1144/E

tag:字符串模拟,大整数。

题意:给定两个字符串,求字典序中间串。

思路:可以把这个题当做一个26进制数的模拟。a~z分别代表0~25,然后求平均,在通过数字反求字符串。

然后写出这么个代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef unsigned long long ll;
 4 ll _input(ll);
 5 void _output(ll,ll);
 6 int main()
 7 {
 8     ll n;
 9     cin>>n;
10     ll num1,num2;
11     num1=_input(n);
12     num2=_input(n);
13     ll res=0;
14     res=(num1+num2)/2;
15     _output(res,n);
16     cout<<endl;
17     return 0;
18 }
19 ll _input(ll n)
20 {
21     ll re=0;
22     char a;
23     for(ll i=0;i<n;i++)
24     {
25         cin>>a;
26         re=re*26+(a-'a');
27     }
28     return re;
29 }
30 void _output(ll res,ll n)
31 {
32     stack<char> qq;
33     while(n--)
34     {
35         qq.push('a'+res%26);
36         res/=26;
37     }
38     while(qq.size())
39     {
40         cout<<qq.top();
41         qq.pop();
42     }
43 }
View Code

然后你就可以很快的wa了。

???

 

好吧,想着总不能爆掉我的unsigh long long 吧,然后打脸了。 26^10000,,,,随便爆。。

于是乎只能用数组模拟,一来可以方便的表示26进制,二来也可以表示很大的数据,爆不掉(除非非常非常变态了)

代码如下

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[1000005];
 4 int main()
 5 {
 6     int n;
 7     cin>>n;
 8     string c,b;//储存字符串
 9     cin>>c;
10     cin>>b;
11     for(int i=n-1;i>=0;i--)       //模拟加法
12     {
13         a[i+1]+=c[i]-'a'+b[i]-'a';  //从a[1]开始存,a[0]留着进位用。
14         a[i]+=a[i+1]/26;        //给高一位先进位
15         a[i+1]%=26;           //当前位对26取模。
16     }
17     char e;
//模拟除法
18 e='a'; 19 if(a[0]>=2)cout<<char(e+a[0]/2);   20 if(a[0]%2!=0)a[1]+=26;      //看最高位是否存在进位的,如果存在,退回来。 21 for(int i=1;i<=n;i++) 22 { 23 e='a'; 24 cout<<char(e+a[i]/2);    //输出当前位除2所表示的数。 25 if(a[i]%2!=0)a[i+1]+=26;  //剩下的退回下一位。 26 } 27 cout<<endl; 28 return 0; 29 }

 

转载于:https://www.cnblogs.com/greenpepper/p/10645298.html

基于STM32设计的数字示波器全套资料(原理图、PCB图、源代码) 硬件平台: 主控器:STM32F103ZET6 64K RAM 512K ROM 屏幕器:SSD1963 分辨率:480*272 16位色 触摸屏:TSC2046 模拟电路: OP-TL084 OP-U741 SW-CD4051 CMP-LM311 PWR-LM7805 -LM7905 -MC34063 -AMS1117-3.3 DRT-ULN2003 6.继电器:信号继电器 7.电源:DC +12V 软件平台: 开发环境:RealView MDK-ARM uVision4.10 C编译器:ARMCC ASM编译器:ARMASM 连机器:ARMLINK 实时内核:UC/OS-II 2.9实时操作系统 GUI内核:uC/GUI 3.9图形用户接口 底层驱动:各个外设驱动程序 数字示波器功能: 波形发生器:使用STM32一路DA实现正弦,三角波,方波,白噪声输出。 任意一种波形幅值在0-3.3V任意可调、频率在一定范围任意可调、方波占空比可调。调节选项可以通过触摸屏完成设置。 SD卡存储: SD卡波形存储输出,能够对当前屏幕截屏,以JPG格式存储在SD卡上。能够存储1S内的波形数据,可以随时调用查看。 数据传输:用C#编写上位机,通过串口完成对下位机的控制。(1)实现STOP/RUN功能(2)输出波形电压、时间参数(3)控制截屏(4)控制波形发生器(5)控制完成FFT(6)波形的存储和显示 图形接口: UCGUI 水平扫速: 250 ns*、500ns、1μs、5 μs、10μs、50μs、500 μs、5ms 、50ms 垂直电压灵敏度:10mV/div, 20mV/div, 50mV/div, 0.1V/div, 0,2V/div, 0.5V/div, 1V/div,2V/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值