首页 > 其他 > 详细

20140711总结

时间:2014-07-12 16:20:23      阅读:307      评论:0      收藏:0      [点我收藏+]

  第一题,傻逼题。但是忘判平方了。

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int xx[4000001];
 6 inline void work(int n)
 7 {
 8     for(int i=1;i*i<=n;i++)
 9     {
10         if(n%i==0)
11         {
12             if(i*i==n) xx[n/i]++;
13             xx[i]++;
14         }
15     }
16 
17 }
18 char k;
19 inline int getint()
20 {
21     int ans=0;
22     k=getchar();
23     while(k==\n||k== )
24         k=getchar();
25     while(k!=\n&&k!= )
26     {
27         ans=ans*10+(int)k-(int)0;
28         k=getchar();
29     }
30     return ans;
31 }
32 int ans=0;
33 int main()
34 {
35     freopen("set.in","r",stdin);
36     freopen("set.out","w",stdout);
37     int N=getint();
38     for(int i=1;i<=N;i++)
39     {
40         k=getchar();
41         getchar();
42         if(k&1)
43         {
44             int t=getint();
45             work(t);
46         }
47         else
48         {
49             int t=getint();
50             ans^=xx[t];
51         }
52         
53         
54     }
55     printf("%d\n",ans);
56 }
View Code

  第二题,并查集,详见食物链。

bubuko.com,布布扣
 1 #include<cstdio>
 2 #include<string>
 3 #include<cstring>
 4 using namespace std;
 5 long long father[3000030];
 6 long long Find(long long x)
 7 {
 8     if(father[x]==x)
 9         return x;
10     return father[x]=Find(father[x]);
11 }
12 bool Same(long long L,long long R)
13 {
14     if(Find(L)==Find(R))
15         return true;
16     return false;
17 }
18 void Union(long long L,long long R)
19 {
20     long long fL,fR;
21     fL=Find(L);
22     fR=Find(R);
23     if(fL==fR)
24         return;
25     father[fL]=fR;
26 }
27 int main()
28 {
29     long long n,k,ans=0;
30     scanf("%I64d%I64d",&n,&k);
31     for (int i=1;i<=n*3;i++)  //扩大为三个节点
32         father[i]=i;
33     for (int i=1;i<=k;i++)
34     {
35         long long d,x,y;
36         scanf("%I64d%I64d%I64d",&d,&x,&y);
37         if (x>n||y>n) ans++;
38         else if (d!=1&&d!=2) ans++;
39         else if (d==2&&x==y) ans++;
40         else if (d==1) //x,y 同类时
41         {
42             if (Same(x,y+n)) ans++; //x吃y
43             else if (Same(x+n,y)) ans++; //y吃x
44             else //合并操作
45             {
46                 Union(x,y);
47                 Union(x+n,y+n);
48                 Union(x+n+n,y+n+n);
49             }
50         }
51         else  //x吃y时
52         {
53             if (Same(x,y)) ans++; //x,y同类
54             else if (Same(x+n,y)) ans++; //y吃x
55             else
56             {
57                 Union(x,y+n);
58                 Union(x+n,y+n+n);
59                 Union(x+n+n,y);
60             }
61         }
62     }
63     printf("%I64d\n",k-ans);
64     return 0;
65 }
View Code

  第三题,调和级数是收敛的(笑)。标程是数据分治。。哎。我错的很离谱。

bubuko.com,布布扣
 1 #include<cmath>
 2 #include<cstdio>
 3 using namespace std;
 4 long long n;
 5 int m;
 6 int main() 
 7 {
 8     scanf("%I64d%d",&n,&m);
 9     if(n<5000000)
10     {
11         double ans=0.0;
12         for(int i=1;i<=n;i++)
13             ans+=1.0/i;
14         printf("%d\n",(int)floor(ans*m - (1e-7)));
15      }
16     else
17     {
18         printf("%d\n",(int)floor((log(n)+0.57721566490)*m - (1e-7)));
19     }
20     return 0;
21 }
View Code

 

20140711总结,布布扣,bubuko.com

20140711总结

原文:http://www.cnblogs.com/JackSlowFuck/p/3838234.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!