https://codeforces.com/contest/1181/problem/B

从中间拆开然后用大数搞一波。

当时没想清楚奇偶是怎么弄,其实都可以,奇数长度字符串的中心就在len/2,偶数长度字符串的中心恰好是len/2和len/2-1。

但是要是作为末尾指针的位置来说的话

奇数长度字符串:把中心分给后半串,那么分割点是len/2。把中心分给前半串,那么分割点是len/2+1。

偶数长度字符串:分割点是len/2。

注意子串的取法,其实最方便的还是传头尾指针进去。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; inline int read() {
int x=0;
int f=0;
char c;
do {
c=getchar();
if(c=='-')
f=1;
} while(c<'0'||c>'9');
do {
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
} while(c>='0'&&c<='9');
return f?-x:x;
} inline void _write(int x) {
if(x>9)
_write(x/10);
putchar(x%10+'0');
} inline void write(int x) {
if(x<0) {
putchar('-');
x=-x;
}
_write(x);
putchar('\n');
} struct BigInt {
const static int mod=10000;
const static int DLEN=4;
int a[30005],len; BigInt() {
memset(a,0,sizeof(a));
len=1;
} BigInt(int v) {
memset(a,0,sizeof(a));
len=0;
do {
a[len++]=v%mod;
v/=mod;
} while(v);
} BigInt(const char *s) {
memset(a,0,sizeof(a));
int L=strlen(s);
len = L/DLEN;
if(L%DLEN)
len++;
int index=0;
for(int i=L-1; i>=0; i-=DLEN) {
int t=0;
int k=i-DLEN+1;
if(k<0)
k=0;
for(int j=k; j<=i; j++)
t=t*10+s[j]-'0';
a[index++] = t;
}
} BigInt operator+(const BigInt &b)const {
BigInt res;
res.len=max(len,b.len);
for(int i=0; i<res.len; i++) {
res.a[i]+=((i<len)?a[i]:0)+((i<b.len)?b.a[i]:0);
res.a[i+1]+=res.a[i]/mod;
res.a[i]%=mod;
}
if(res.a[res.len] > 0)
res.len++;
return res;
} BigInt operator*(const BigInt &b)const {
BigInt res;
for(int i=0; i<len; i++) {
int up = 0;
for(int j=0; j<b.len; j++) {
int temp=a[i]*b.a[j]+res.a[i+j]+up;
res.a[i+j]=temp%mod;
up=temp/mod;
}
if(up != 0)
res.a[i+ b.len]=up;
}
res.len=len+b.len;
while(res.a[res.len-1]==0&&res.len>1)
res.len--;
return res;
} bool operator>(const BigInt &b)const {
if(len>b.len)
return true;
else if(len==b.len) {
int ln=len-1;
while(a[ln]==b.a[ln]&&ln>=0)
ln--;
if(ln>=0&&a[ln]>b.a[ln])
return true;
else
return false;
} else
return false;
} void output() {
printf("%d",a[len-1]);
for(int i = len-2; i >=0 ; i--)
printf("%04d",a[i]);
printf("\n");
}
}; char s[100005];
char t[100005]; int main() {
#ifdef Yinku
freopen("Yinku.in","r",stdin);
//freopen("Yinku.out","w",stdout);
#endif // Yinku
int l;
scanf("%d%s",&l,s);
int m1=l/2;
int m2=l/2+1;
int h1=m1;
while(s[h1]=='0')
h1--;
int h2=m2;
while(h2<l&&s[h2]=='0')
h2++;
strncpy(t,s,h1);
t[h1]='\0';
BigInt a(t);
strcpy(t,s+h1);
BigInt b(t);
BigInt c=a+b; strncpy(t,s,h2);
t[h2]='\0';
a=BigInt(t);
strcpy(t,s+h2);
b=BigInt(t);
BigInt c2=a+b;
if(c>c2)
c2.output();
else
c.output();
}

最新文章

  1. TWS笔试题---回家想了想答案,希望对jobseeker有帮助
  2. struct 大小计算
  3. 8种效果实例-jQuery anoSlide 焦点图轮播
  4. php 解析json
  5. cocoaPods 去警告
  6. TFS 2010 使用手册(二)项目集合与项目
  7. Map.entrySet() 简介
  8. DHCP 服务器
  9. linux相关解压命令
  10. Linux下安装、配置、授权、调优Mysql
  11. FZU-1925+几何
  12. 转:python idle 清屏问题的解决
  13. SQL优化 MySQL版 - 避免索引失效原则(二)
  14. 谷歌浏览器导出excel失败问题解决(网上都没解决)
  15. docker--在centos镜像安装mysql
  16. what is spring-cloud
  17. 2017ICPC南宁赛区网络赛 Train Seats Reservation (简单思维)
  18. BT.656 NTSC制式彩条生成模块(verilog)
  19. 使用electron-packager electron-builder electron-updater 打包vue项目,支持在线更新
  20. 【vue】todolist小练习

热门文章

  1. Delphi Stringlist Delimiter如何区分TAB和空格
  2. linux-常用指令3
  3. 使用jquery执行ajax
  4. BEC listen and translation exercise 49
  5. python模块inspect.py
  6. 不要使用Android Studio的Git Commit了----&gt;记一次debug
  7. [原]NYOJ-字符串替换-113
  8. ffmpeg用法(心得体会还有你见过的用法)
  9. POJ3080 POJ3450Corporate Identity(广义后缀自动机||后缀数组||KMP)
  10. LOJ2305 「NOI2017」游戏