zoukankan      html  css  js  c++  java
  • 暑假集训Day22 I (模拟+高精度)

    题目链接在这里:200202.pdf (codeforces.com)

    其实思路非常好想,就是每次折半,把前一半回文到后面,这样的复杂度是log肯定可以行得通。然后如果最后剩的是10的话要特判一下

    需要注意的是如果在结构体里面开很大的数组比如1e5以上的话会很有可能RE

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 const int MAX=1e5+5;
     4 int t,ls1,ls2;
     5 char s1[MAX],s2[MAX];
     6 vector <string> ans;
     7 int main(){
     8     freopen ("i.in","r",stdin);
     9     freopen ("i.out","w",stdout);
    10     int i,j,mid;
    11     scanf("%d",&t);
    12     while (t--){
    13         scanf("%s",s1+1);
    14         ls1=strlen(s1+1);
    15         reverse(s1+1,s1+ls1+1);
    16         ans.clear();
    17         while (ls1){
    18             if (ls1==2 && s1[2]=='1' && s1[1]=='0'){
    19                 ans.push_back("1");
    20                 ans.push_back("9");
    21                 break;
    22             }
    23             if (ls1==1){
    24                 ans.push_back(string(1,s1[1]));
    25                 break;
    26             }
    27             mid=ls1/2;
    28             memset(s2,0,sizeof(s2));
    29             for (i=ls1;i>mid;i--) s2[i]=s1[i];
    30             s2[mid]--;
    31             i=mid;
    32             while (s2[i]<'0'){
    33                 s2[i]+=10;
    34                 s2[i+1]--;
    35                 i++;
    36             }
    37             if (s2[ls1]=='0'){
    38                 for (i=1;i<=mid;i++) s2[i]=s2[ls1-1-i+1];
    39                 if (ls1%2==0) s2[mid]='9';
    40                 ans.push_back(string(s2+1,s2+ls1));
    41             }
    42             else{
    43                 for (i=1;i<=mid;i++) s2[i]=s2[ls1-i+1];
    44                 ans.push_back(string(s2+1,s2+ls1+1));
    45             }
    46             for (i=1;i<=ls1;i++){
    47                 s1[i]=s1[i]-(s2[i]-'0');
    48                 if (s1[i]<'0'){
    49                     s1[i]+=10;
    50                     s1[i+1]--;
    51                 }
    52             }
    53             while (s1[ls1]=='0' && ls1) ls1--;
    54         }
    55         printf("%d
    ",ans.size());
    56         for (i=0;i<ans.size();i++)
    57             cout<<ans[i]<<endl;
    58     }
    59     return 0;
    60 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    606. Construct String from Binary Tree
    696. Count Binary Substrings
    POJ 3255 Roadblocks (次短路)
    POJ 2823 Sliding Window (单调队列)
    POJ 1704 Georgia and Bob (博弈)
    UVa 1663 Purifying Machine (二分匹配)
    UVa 10801 Lift Hopping (Dijkstra)
    POJ 3281 Dining (网络流之最大流)
    UVa 11100 The Trip, 2007 (题意+贪心)
    UVaLive 4254 Processor (二分+优先队列)
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/15186890.html
Copyright © 2011-2022 走看看