蒟蒻求助dalao,我只AC了一个,8个RE,1个TLE,能帮我优化一下吗?急

P3612 [USACO17JAN] Secret Cow Code S

leo888 @ 2021-07-24 22:49:55

我是个bingbing 我就是逊了!! 正题: 我觉得思路是没错的,只是超时了 觉得我思路有错的大可以再看一遍 再三确认有错的话,就和我说!!! 注意:字符串+字符(串)是拼接起来! 下面来看解释: PS:求dalao回复,我想AC(实则不想被学校老师批) 嘿嘿嘿,能给一个关注吗?求求了

#include<bits/stdc++.h>
using namespace std;
string s;
stack<char>a;
char s1,s2[100001];
long long len,n,len1;
int main(){
    cin>>s>>n;
    len1=s.size();
    while(len1<n){
        len1*=2;//这个是用来减少时间的
    }
    for(long long j=0;j<len1;j++){
        len=s.size();//判断长度
        for(long long i=0;i<len;i++)a.push(s[i]);//压栈
        s1=a.top();//掏出栈顶
        a.pop();//将栈顶的是踢出
        s=s+s1;//拼接
        long long k=a.size();//栈里还有几个
        for(long long i=k-1;i>=0;i--){
            s2[i]=a.top();//掏出栈顶
            a.pop();    //将栈顶的是踢出
        }
        for(long long i=0;i<k;i++)s=s+s2[i];//拼接
    }
    cout<<s[n-1];//输出。因为我从0开始,所以要-1
}

by 阿巴人上人 @ 2021-07-25 03:17:44

@李宇轩leo888

一看数据你这样必tle

估计是贪心


by 阿巴人上人 @ 2021-07-25 03:25:16

@李宇轩leo888

#include <bits/stdc++.h>
using namespace std;
string s;
long long n,num,i;
int main()
{
    cin>>s>>n;
    num=s.length(); 
    while(num<n)
    {
        i=num;
        while(n>i*2)
            i*=2;
        n-=(i+1); 
        if(n==0)
            n=i;
    }
    cout<<s[n-1];
}

利用翻折推在原单词中的位置


by leo888 @ 2021-07-25 16:53:07

@阿巴人上人 感谢dalao


by Along_Dog @ 2021-09-19 10:31:54

#include<bits/stdc++.h>
using namespace std;
int main(){
  string st;
  cin>>st;
  cout<<st[0];
}

这个30分


|