hdu 2522 1/nの循環節の小さいシミュレーションを求めてまたmemsetは時間の特殊な書き方を節約します
1999 ワード
A simple problem
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2567 Accepted Submission(s): 882
Problem Description
Ztyは数学の問題に夢中だ.ある日、yifenfeiは数学の問題を出して彼を倒すのが難しいと思って、彼に1/nに答えさせました.でもZtyは答えられない^^.みんなでプログラミングして彼を助けてください.
Input
1行目の整数Tは、テストグループ数を表す.後のT行は、行毎に1つの整数n(1<=|n|<=10^5)である.
Output
出力1/n.(循環小数である、最初の循環節のみ出力).
Sample Input
Sample Output
Author
yifenfei
コードは簡単です 直接シミュレーションして最初は自分の頭がぼんやりしていて、結果をans配列に保存しなければならなくて、それからめちゃくちゃになりました. 現実の演算を直接シミュレートすればいい
またmemsetの使用に注意 直接memset(a,0,sizeof(a)); 時間がもったいない
memset(a,0,(n+100)*sizeof(a[0]))の場合 これでだいぶ速くなります
次の手順について 直接memsetが2000 msにタイムアウトすると 上記の方法で200 msしかかかりません
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2567 Accepted Submission(s): 882
Problem Description
Ztyは数学の問題に夢中だ.ある日、yifenfeiは数学の問題を出して彼を倒すのが難しいと思って、彼に1/nに答えさせました.でもZtyは答えられない^^.みんなでプログラミングして彼を助けてください.
Input
1行目の整数Tは、テストグループ数を表す.後のT行は、行毎に1つの整数n(1<=|n|<=10^5)である.
Output
出力1/n.(循環小数である、最初の循環節のみ出力).
Sample Input
4
2
3
7
168
Sample Output
0.5
0.3
0.142857
0.005952380
Author
yifenfei
コードは簡単です 直接シミュレーションして最初は自分の頭がぼんやりしていて、結果をans配列に保存しなければならなくて、それからめちゃくちゃになりました. 現実の演算を直接シミュレートすればいい
またmemsetの使用に注意 直接memset(a,0,sizeof(a)); 時間がもったいない
memset(a,0,(n+100)*sizeof(a[0]))の場合 これでだいぶ速くなります
次の手順について 直接memsetが2000 msにタイムアウトすると 上記の方法で200 msしかかかりません
#include<stdio.h>
#include<string.h>
int vis[1000000+100];
int main()
{
int cas,n,i;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
if(n<0) {printf("-");n=-n;}
memset(vis,0,(n+100)*sizeof(vis[0]));
int cnt=0;
int fz=1,fm=n;
if(n==1) {printf("1
");continue;}
printf("0.");
while(fz!=0)
{
vis[fz]=1;
fz=fz*10;
printf("%d",fz/fm);
fz=fz%fm;
if(vis[fz]) break;
}
printf("
");
}
return 0;
}