126 条题解
-
0Rico LV 8 @ 2009-10-08 22:21:51
晒晒
var
n,t,x,ans:int64;
i,remain:integer;
st:string;begin
readln(n);
t:=0;
x:=1;
for i:=1 to 8 do begin
t:=t+9*i*x;
if t>n then break;
x:=x*10;
end;
t:=t-9*i*x;
n:=n-t;
ans:=n div i;
ans:=ans+x;
remain:=n mod i;
if remain=0 then begin
ans:=(ans-1)mod 10;
writeln(ans);
end
else begin
str(ans,st);
writeln(st[remain]);
end;
end. -
02009-10-06 15:59:40@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
var
sum2,n,len,ans,i,j,k,sum:longint;
s:string;
begin
readln(n);
sum:=9;len:=1;k:=9;
while sum -
02009-09-24 13:15:28@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 806ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:806ms无敌程序O(n)级别,哈哈。
才几行呀!!!
var s,i:longint;
d:string;
begin
readln(s);
i:=0;
repeat
i:=i+1;
str(i,d);
if s>length(d) then s:=s-length(d) else begin writeln(d);break;end;
until false;
readln;
end.
短^100000000000000000000000000000000 -
02009-09-19 20:19:56@
0ms朴素。a[i]记录i位共多少。感觉程序虽然小猥但比较清晰。
var n,k,i,j,l:longint;
a:array[1..10]of int64;
begin
readln(n);
a[1]:=9;
for i:=2 to 10 do a[i]:=a*10;i:=1;
while n>a[i]*i do begin n:=n-a[i]*i;inc(i);end;
j:=i;i:=1;
for k:=1 to j-1 do i:=I*10;
inc(i,n div j);
n:=n mod j;
l:=j;
for j:=1 to l-n do i:=i div 10;
writeln(i mod 10);
end. -
02009-09-07 22:08:38@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms朴素程序。
a数组记录i位数共有a[i]个
然后判断n是在第几位的数晒程序
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
var
n,i,j,sum,b,x,t:longint;
a:array[0..10]of int64;
s:string;
begin
readln(n);
for i:=1 to 10 do
begin
a[i]:=9*i;
for j:=1 to i-1 do
a[i]:=a[i]*10;
end;
for i:=1 to 10 do if a[i]>=n then break;
t:=i;sum:=n;
for i:=1 to t-1 do sum:=sum-a[i];
x:=sum div t;b:=1;
for i:=1 to t-1 do
b:=b*10;
b:=b+x;
sum:=sum mod t;
if sum=0 then
begin
str(b-1,s);
writeln(s[t]);
halt;
end;
str(b,s);
writeln(s[sum]);
end. -
02009-09-05 22:13:23@
const num:array[1..9] of longint=(1,10,190,2890,38890,488890,5888890,68888890,788888890);{每一位数的第一位数的位置}
var n,g,k,l,i:longint;
s:string;
begin
read(n);
for g:=9 downto 1 do
if n>num[g] then begin n:=n-num[g]+1; break; end;{看一看这是一个几位数}
l:=n mod g;
if l=0 then l:=g;{l表示第n位是这个数的第几位}
k:=1;
for i:=1 to g do k:=k*10;
k:=k div 10-1+n div g;{k表示这个数}
str(k,s);
writeln(s[l]);{利用字符串输出这一位数}
end.15行!
注释乱写,哪要n^5
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms一次ac
-
02009-09-03 15:25:31@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msC++ 程序如下:
#include
#includeusing namespace std;
/* 优化法 */
int methodA(int _paramN)
{
int pow10Table[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 };// 首先判断是不是一位数,立刻返回。
if (_paramN > _paramN;// MethodA
cout -
02009-09-02 18:48:19@
唉,用string写的猥琐程序............
const
c:array [1..8] of longint = (9,189,2889,38889,488889,5888889,68888889,788888889);
var
i,m,n,p,x,y:longint; s:string;
begin
readln(m); p:=1; n:=1;
while m-c[p]>0 do begin n:=m-c[p]; inc(p);end;
x:=n div p; y:=(n-1) mod p +1;if y
-
02009-08-28 19:43:16@
下面的和我想的差不多
不过我用了直到循环
最后一个点791ms
本来还以为会超时! -
02009-08-24 15:54:33@
注释在说什么啊?
直接计算一次AC
主要部分:
for i:=1 to 100000000 do
begin
str(i,d);
len:=length(d);
n:=n-len;
if n -
02009-08-21 23:49:52@
├ 测试数据 05:答案正确... 0ms
直接计算...
看不懂注释
-
02009-08-18 22:24:58@
program p1181;
const
line:array[1..9]of longint=(0,9,189,2889,38889,488889,5888889,68888889,788888889);
var
i,n,num,yushu,jiashu:longint;
begin
read(n);
for num:=1 to 9 do
if (line[num]=n) then break;
n:=n-line[num];
yushu:=n mod num;
jiashu:=1;
for i:=1 to num-1 do
jiashu:=jiashu*10;
n:=n div num+jiashu-1;
if yushu>0 then
begin
inc(n);
yushu:=num-yushu;
jiashu:=1;
for i:=1 to yushu do
jiashu:=jiashu*10;
yushu:=jiashu*10;
write((n mod yushu-n mod jiashu)div jiashu);
end
else write(n mod 10);
end. -
02009-08-17 11:12:27@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
[blue]├ 测试数据 05:答案正确... 791ms [/blue]
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:791msvar
s,t:string;
i,j,k,l,n,m:longint;begin
read(n);
m:=0;
i:=0;
while mn then
begin
repeat
dec(m);
delete(t,length(t),1);
until m=n;
write(copy(t,length(t),1));
end;
end. -
02009-08-14 21:56:03@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
VJ为何不支持**功能,即A**B=A^B,都怪程晨 -
02009-08-08 22:02:48@
数据超范围..注意..枚举位数删减就好
-
02009-08-01 21:06:25@
随便写了一个程序,一次AC,不能秒杀就算啦,懒得优化
我家电脑n=10^8时要3s.....编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 838ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:838msvar n,a,rs,b:longint;
s:string;begin
read(n);
a:=0;
rs:=0;
while true do
begin
a:=a+1;
str(a,s);
b:=length(s);
if b+rs>=n then
begin
write(s[n-rs]);
halt;
end;
rs:=rs+b;
end;
end. -
02009-07-23 18:06:29@
怪盗积德你错了
var 是不可一定义of longint=(0,9,189,2889,38889,488889,5888889,68888889,788888889);
应该用CONST -
02009-07-20 15:23:39@
打表打出来192MB~
-
02009-07-17 10:28:50@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms秒杀 哈哈哈哈。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
-
02009-07-07 20:50:34@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms本人第一次 一次Ac一条程序,哇哈哈~~~
program p1181;
var
i,j,k:longint;
m,n:longint;
s:string;
beginread(n);
if n