青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-6  評論-2  文章-0  trackbacks-0
  2010年12月6日
 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 char a[36000];
 5 void rev()
 6 {
 7     int len=strlen(a),i;
 8     char t;
 9     for(i=0;i<len/2;++i)
10     {
11         t=a[i];
12         a[i]=a[len-1-i];
13         a[len-1-i]=t;
14     }
15 }//strrev()貌似不是標準庫函數,囧
16 
17 void multi(int n)
18 {
19     int i,l=strlen(a),m=0,jw=0;
20     rev();
21     char t[36000];
22     for(i=0;i<l;++i)
23     {
24         t[i]=((a[i]-'0')*n+jw)%10+'0';
25         jw=((a[i]-'0')*n+jw)/10;
26     }
27     if(jw>=1000)
28     {
29         t[i]=jw%10+'0';
30         t[i+1]=(jw/10)%10+'0';
31         t[i+2]=(jw/100)%10+'0';
32         t[i+3]=jw/1000+'0';
33         t[i+4]='\0';
34     }
35     else if(jw>=100)
36     {
37         t[i]=jw%10+'0';
38         t[i+1]=(jw/10)%10+'0';
39         t[i+2]=jw/100+'0';
40         t[i+3]='\0';
41     }
42     else if(jw>=10)
43     {
44         t[i]=jw%10+'0';
45         t[i+1]=(jw/10)%10+'0';
46         t[i+2]='\0';
47     }
48     else if(jw)
49     {
50         t[i]=jw+'0';
51         t[i+1]='\0';
52     }
53     else t[i]='\0';
54     strcpy(a,t);
55     rev();
56 }//將字符串乘n,需考慮最后的進位的位數。
57 
58 int main()
59 {
60     int n;
61     while(cin>>n)
62     {
63         memset(a,0,36000);
64         a[0]='1';
65         a[1]='\0';
66         for(int i=2;i<=n;++i)multi(i);
67         cout<<a<<endl;
68     }
69     return 0;
70 }
71 

  由于一直不肯寫個大整數的類,又不會用JAVA,遇到這種題目真是感到很難受。不過我今天用了一種比較耗時但確實思路簡單的方法過了這道題。首先,我們必須知道10000!到底有多少位,這樣才好定義合適的數組。
log10(2)+log(3)+...+log10(10000)=35659.9,所以定義一個36000的字符數組就夠了。整個實現比較簡單但是用了2312MS.....應該分治之類的算法會好點,最快的100MS就過了。估計是重復的反轉和復制耗時了。
posted @ 2010-12-06 18:22 cometrue 閱讀(349) | 評論 (0)編輯 收藏
  2010年11月24日
//求N!的位數

//N!=1*2*3**N,兩邊取常用對數,即可算出log10(N!),向上取整即為N!的位數
//hdoj    984MS    344K
/*

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    double sum=0.0;
    int n,i,times,res;
    if(cin>>times&&times!=0)
    {
        while(times)
        {
            cin>>n;
            for(i=2;i<=n;++i)
                sum+=log10(i);
            res=ceil(sum);
            cout<<res<<endl;
            sum=0.0;
            --times;
        }
    }
    return 0;
}
*/
//String公式的方法,N!~sqrt(2*pi*N)*(N/e)^N
//hdoj    0MS        360K
#include <iostream>
#include 
<cmath>
using namespace std;
const double pi=3.1415926;
int main()
{
    
int n,times;
    
long double sum;
    
if(cin>>times&&times)
    {
        
while(times)
        {
            cin
>>n;
            sum
=(long double)0.5*log10(2*pi*n)+(long double)n*(log10(n)-log10(exp(1)));
            cout
<<(long)ceil(sum)<<endl;
            
--times;
        }
    }
    
return 0;
}
posted @ 2010-11-24 13:35 cometrue 閱讀(401) | 評論 (0)編輯 收藏
  2010年11月18日
#include <iostream>
using namespace std;
int a,b,s[100];
struct Pair
{
    
int x;
    
int y;
}res[
50];
int main()
{
    
int n,i,j,k;
    
bool flag=false;
    res[
0].x=res[0].y=1;
    
while(cin>>a>>b>>n)
    {
        
if(!(a||b||n))return 0;
        
for(i=1;i<50;++i)
        {
            res[i].x
=res[i-1].y;
            res[i].y
=(a*res[i-1].y+b*res[i-1].x)%7;
            
for(j=0;j<i-1;++j)//…………………………注意這里循環上限是i-1,這樣可以排除三個連續相等的情況。就是把循環節為1的看成2.
            {
                
if(res[j].x==res[i].x&&res[j].y==res[i].y)
                {
                    flag
=true;
                    
break;
                }
            }
            
if(flag)break;
        }
//一個循環找出循環節大小
        flag=false;//……………………注意把標志還原
        if(n<=j)cout<<res[n].x<<endl;//未進入循環時
        else
        {
            
if((n-j)%(i-j)==0)k=i-1;
            
else k=(n-j)%(i-j)+j-1;//這個式子改了很長時間,總是會出現問題。這是最終的形式
            cout<<res[k].x<<endl;
        }
    }
    
return 0;
}
提交了七次終于給過了。是道數論的簡單題,不過應該用不到什么高深的知識,關鍵是找出循環節。因為對于1000000000的大小,如果不找規律的話無論如何也要超時的。分析一下,每個數僅取決于它前面的兩個,所以如果出現了相同的數對,則必出現循環。而且,每個數都是0~6之間的一個,可知不同的數對只有7*7=49個,那么只要計算出前50個數,則其中必有相同的兩對數出現。上代碼。AC之后我想知道循環是不是總是從最前面兩個數開始,于是簡單寫了一個程序,遍歷了所有的a,b(易知它們也只有49種組合),下面是我得到的結果:
a b j i i-j
0 0 2 4 2
0 1 0 2 2
0 2 0 6 6
0 3 0 12 12
0 4 0 6 6
0 5 0 12 12
0 6 0 4 4
1 0 0 2 2
1 1 0 16 16
1 2 0 6 6
1 3 0 24 24
1 4 0 48 48
1 5 0 21 21
1 6 0 6 6
2 0 1 4 3
2 1 0 6 6
2 2 0 48 48
2 3 0 6 6
2 4 0 48 48
2 5 0 24 24
2 6 0 2 2
3 0 1 7 6
3 1 0 16 16
3 2 0 48 48
3 3 0 42 42
3 4 0 6 6
3 5 0 2 2
3 6 0 8 8
4 0 1 4 3
4 1 0 16 16
4 2 0 48 48
4 3 0 21 21
4 4 0 2 2
4 5 0 6 6
4 6 0 8 8
5 0 1 7 6
5 1 0 6 6
5 2 0 48 48
5 3 0 2 2
5 4 0 48 48
5 5 0 24 24
5 6 0 14 14
6 0 1 3 2
6 1 0 16 16
6 2 0 2 2
6 3 0 24 24
6 4 0 48 48
6 5 0 42 42
6 6 0 3 3
可見當a,b都是7的倍數時,循環從第三個數開始(以后都是0);當a,b中只有一個是7的倍數時,循環從第二個數開始(1,0、0,1的情況比較特殊,因為跟開始的1,1重復了所以可以認為是從第一個數開始);當a,b都不是7的倍數是,循環從第一個數開始。可見還是從第一個數開始循環的多。循環節也有長有短,比如當a=1,b=4時一直到第49個數才出現循環。

posted @ 2010-11-18 17:00 cometrue 閱讀(1534) | 評論 (2)編輯 收藏
  2010年10月21日
#include <stdio.h>
#include 
<string.h>
void conv(char numb[],int n,int base)
{
    
int num[18],len=0,j;
    
while(n/base)
    {
        num[len]
=n%base;
        
++len;
        n
/=base;
    }
    num[len]
=n;
    
        
    
for(j=len;j>=0;--j)
    {
        
if(num[j]>9)numb[len-j]=num[j]+55;
        
else numb[len-j]=num[j]+'0';
    }
    numb[len
+1]='\0';
    
return ;
}


int main()
{
    FILE 
*fin,*fout;
    fin
=fopen("palsquare.in","r");
    fout
=fopen("palsquare.out","w");
    
int base,i,len=0,j;
    fscanf(fin,
"%d",&base);
    
for(i=1;i<=300;++i)
    {
        
char square[18]={'\0'},num[10]={'\0'};
        
int flag=1;
        conv(num,i,
base);
        conv(square,i
*i,base);
        len
=strlen(square);
        
for(j=0;j<=len/2;++j)
        {
            
if(square[j]!=square[len-j-1])
            {
                flag
=0;
                
break;
            }
        }
        
if(flag)fprintf(fout,"%s %s\n",num,square);
    }
    
return 0;
}
我還是習慣用C寫……所以把代碼貼上來的時候發現stdio是黑色的,而“base”是藍色的。
就這樣吧。
題目:
Palindromic Squares
Rob Kolstad

Palindromes are numbers that read the same forwards as backwards. The number 12321 is a typical palindrome.

Given a number base B (2 <= B <= 20 base 10), print all the integers N (1 <= N <= 300 base 10) such that the square of N is palindromic when expressed in base B; also print the value of that palindromic square. Use the letters 'A', 'B', and so on to represent the digits 10, 11, and so on.

Print both the number and its square in base B.

PROGRAM NAME: palsquare

INPUT FORMAT

A single line with B, the base (specified in base 10).

SAMPLE INPUT (file palsquare.in)

10

OUTPUT FORMAT

Lines with two integers represented in base B. The first integer is the number whose square is palindromic; the second integer is the square itself.

SAMPLE OUTPUT (file palsquare.out)

1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696
沒有什么復雜的算法,因為這一節講的就是“the brute force, straight-forward, try-them-all method of finding the answer. 

posted @ 2010-10-21 17:32 cometrue 閱讀(1271) | 評論 (0)編輯 收藏

#include <stdio.h>
#include 
<stdlib.h>
int main()
{
    FILE 
*fin,*fout;
    fin
=fopen("beads.in","r");
    fout
=fopen("beads.out","w");
    
char *beads;
    
int n;
    fscanf(fin,
"%d",&n);
    beads
=(char *)malloc(3*n*sizeof(char));
    fscanf(fin,
"%s",beads);
    
int i,a,b,left,right,sum=0;
    
for(i=n;i<3*n;++i)
    {
        beads[i]
=beads[i-n];
    }
    
for(i=n;i<2*n;++i)
    {
        left
=i;
        right
=i+1;
        
char ch;

        
while(beads[left]=='w'&&left>=0)--left;
        ch
=beads[left];
        
while(left>0&&(beads[left-1]==ch||beads[left-1]=='w'))--left;
        a
=i-left+1;

        
while(beads[right]=='w'&&right<3*n)++right;
        ch
=beads[right];
        
while(right<(3*n-1)&&(beads[right+1]==ch||beads[right+1]=='w'))++right;
        b
=right-i;

        
if(a+b>sum)sum=a+b;
        
if(a>=n||b>=n||a+b>n)sum=n;
    }
    fprintf(fout,
"%d\n",sum);
    
return 0;
}
首先我的想法是從1到n,left=0,right=1,然后往兩邊數顏色相同的珠子。如果用一個大小為n的數組存字符串,一個很顯然的問題就是當left<0或者right>n-1時就要溢出。所以要用到一個取余的函數。
但是這樣確實太麻煩了,寫的代碼也容易出錯,我終于決定重寫了。新的想法是在字符串兩邊各復制一份相同的,這樣就是大小為3×n的字符串,而循環時只需要從n到2×n-1,解決了溢出的問題。(但是我覺得這并不是一個好方法,因為浪費了三倍的空間)。最終的代碼是這樣的,雖然AC了,但總不是那么完美。













posted @ 2010-10-21 14:54 cometrue 閱讀(1293) | 評論 (0)編輯 收藏
題目不難,但是。。。
首先我的想法是從1到n,left=0,right=1,然后往兩邊數顏色相同的珠子。如果用一個大小為n的數組存字符串,一個很顯然的問題就是當left<0或者right>n-1時就要溢出。所以要用到一個取余的函數
int cycle(int a,int n)
{
    return a<0?(a%n+n):(a%n);
}
但是這樣確實太麻煩了,寫的代碼也容易出錯,我終于決定重寫了。新的想法是在字符串兩邊各復制一份相同的,這樣就是大小為3×n的字符串,而循環時只需要從n到2×n-1,解決了溢出的問題。(但是我覺得這并不是一個好方法,因為浪費了三倍的空間)。最終的代碼是這樣的,雖然AC了,但總不是那么完美
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fin,*fout;
fin=fopen("beads.in","r");
fout=fopen("beads.out","w");
char *beads;
int n;
fscanf(fin,"%d",&n);
beads=(char *)malloc(3*n*sizeof(char));
fscanf(fin,"%s",beads);
int i,a,b,left,right,sum=0;
for(i=n;i<3*n;++i)
{
beads[i]=beads[i-n];
}
for(i=n;i<2*n;++i)
{
left=i;
right=i+1;
char ch;

while(beads[left]=='w'&&left>=0)--left;
ch=beads[left];
while(left>0&&(beads[left-1]==ch||beads[left-1]=='w'))--left;
a=i-left+1;

while(beads[right]=='w'&&right<3*n)++right;
ch=beads[right];
while(right<(3*n-1)&&(beads[right+1]==ch||beads[right+1]=='w'))++right;
b=right-i;

if(a+b>sum)sum=a+b;
if(a>=n||b>=n||a+b>n)sum=n;
}
fprintf(fout,"%d\n",sum);
return 0;
}

posted @ 2010-10-21 14:39 cometrue 閱讀(1197) | 評論 (0)編輯 收藏
僅列出標題  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美刺激午夜性久久久久久久| 国产精品超碰97尤物18| 久久综合九色九九| 亚洲天堂网站在线观看视频| 在线观看一区视频| 国产女同一区二区| 国产精品hd| 欧美三级在线播放| 欧美日韩成人综合在线一区二区| 久久国产欧美| 久久久久久久精| 欧美一区二区黄色| 欧美一区国产一区| 久久成人在线| 久久久99久久精品女同性| 欧美一区二区在线免费观看| 亚洲欧美日韩精品综合在线观看| 亚洲第一偷拍| 亚洲精品自在久久| 亚洲综合视频一区| 久久国产精品久久精品国产| 久久精品国产亚洲a| 老司机精品视频网站| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美丰满高潮xxxx喷水动漫| 亚洲人成网站777色婷婷| 欧美成人精品| 99视频精品在线| 久久狠狠婷婷| 欧美日韩国产综合视频在线观看中文| 国产精品久久久久久福利一牛影视 | 国产亚洲一级| 在线观看免费视频综合| 日韩天天综合| 久久精品中文字幕免费mv| 亚洲盗摄视频| 亚洲欧美一区二区原创| 欧美gay视频激情| 国产精品久久久久久久午夜| 在线播放中文一区| 亚洲欧美激情精品一区二区| 欧美福利影院| 欧美在线视频一区二区| 欧美精品一卡二卡| 一区在线电影| 香蕉亚洲视频| 亚洲欧洲日韩在线| 久久精品99国产精品日本| 欧美日韩免费| 午夜宅男久久久| 欧美成人精品在线| 国产一区二区三区免费在线观看 | 亚洲国产1区| 午夜精品在线| 亚洲人成77777在线观看网| 香蕉av777xxx色综合一区| 欧美激情国产精品| 很黄很黄激情成人| 欧美一级片一区| 亚洲另类自拍| 久久一区激情| 国产一区二区黄色| 亚洲视频碰碰| 最新日韩中文字幕| 久久三级视频| 国产精品综合视频| 亚洲性人人天天夜夜摸| 亚洲第一视频| 久久人人看视频| 韩国福利一区| 午夜在线精品偷拍| 一区二区高清在线| 欧美日韩国产精品一区| 亚洲精品国产精品国自产观看浪潮| 欧美伊人精品成人久久综合97| 亚洲精选中文字幕| 欧美日韩一区二| 一本一本a久久| 欧美成人精品激情在线观看| 久久蜜桃av一区精品变态类天堂| 国内精品久久久久伊人av| 久久精品国产第一区二区三区最新章节 | 亚洲欧美一区二区三区久久| 亚洲精品乱码久久久久久| 欧美精品成人| 在线亚洲高清视频| 一区二区三区四区五区在线| 欧美体内she精视频| 亚洲综合色激情五月| 午夜日韩视频| 在线观看国产精品网站| 欧美国产综合一区二区| 欧美激情精品久久久久久黑人| 亚洲日本一区二区三区| 亚洲美女在线国产| 国产精品稀缺呦系列在线| 久久久久成人网| 久久美女性网| 日韩亚洲欧美成人| 一区二区欧美国产| 国产欧美精品va在线观看| 久久亚洲春色中文字幕久久久 | 夜夜嗨av一区二区三区| 日韩亚洲欧美成人| 国产亚洲精品久久久久婷婷瑜伽 | 国产九色精品成人porny| 久久久亚洲成人| 欧美精品一卡二卡| 久久久www成人免费精品| 欧美大片国产精品| 中文在线不卡| 久久gogo国模裸体人体| 一区二区三区.www| 久久精品一区二区三区中文字幕| 亚洲日本理论电影| 亚洲欧美国产精品va在线观看| 在线观看三级视频欧美| 99精品国产热久久91蜜凸| 国语自产精品视频在线看抢先版结局| 亚洲国产导航| 国产一区二区三区视频在线观看| 亚洲激情av在线| 国产又爽又黄的激情精品视频 | 久热这里只精品99re8久| 欧美三区美女| 欧美高清在线| 国产一区二区三区四区hd| 亚洲东热激情| 国模一区二区三区| 亚洲视频在线观看| 日韩手机在线导航| 美日韩丰满少妇在线观看| 久久国产精品久久精品国产| 国产精品久久久久aaaa樱花| 亚洲国产精品黑人久久久| 永久久久久久| 久久深夜福利| 欧美成人精品在线| 在线观看亚洲视频啊啊啊啊| 欧美一级淫片播放口| 久久精品青青大伊人av| 国产综合色在线视频区| 欧美伊人影院| 久久夜色精品国产| 曰本成人黄色| 欧美高清在线| 日韩亚洲精品视频| 午夜性色一区二区三区免费视频| 国产精品久久久久77777| 亚洲一区在线看| 久久精品av麻豆的观看方式 | 99精品免费网| 欧美日韩精品一区视频 | 欧美一级黄色网| 国产欧美日韩激情| 欧美在线观看视频一区二区三区| 亚洲欧美日韩国产综合在线| 国产精品mm| 亚洲精品一区二区三区樱花| 亚洲私人影院在线观看| 欧美视频观看一区| 亚洲麻豆av| 国产日韩三区| 久久噜噜噜精品国产亚洲综合| 黄色在线成人| 99视频热这里只有精品免费| 亚洲日本在线视频观看| 91久久久在线| 亚洲欧美日韩在线不卡| 久久综合999| 免费观看亚洲视频大全| 麻豆国产精品777777在线 | 亚洲网在线观看| 国内揄拍国内精品久久| 美日韩精品免费| 久久亚洲国产精品一区二区| 国产精品久久波多野结衣| 亚洲人久久久| 久久久91精品国产一区二区三区| 国产精品videosex极品| 亚洲乱码一区二区| 亚洲精品你懂的| 国产欧美 在线欧美| 亚洲自拍另类| 性欧美办公室18xxxxhd| 国产精品免费小视频| 欧美成人激情在线| 欧美成人免费大片| 在线播放中文一区| 久久久久国产精品一区二区| 亚洲精品久久久久| 亚洲欧美日韩中文在线制服| 国产精品美女999| 亚洲一区区二区| 亚洲人成人99网站| 久久精品久久99精品久久| 在线看片成人| 欧美大色视频| 久久阴道视频| 亚洲免费av网站|