设为首页 加入收藏

TOP

CodeForces 449C Jzzhu and Apples 数学+素数
2015-07-20 18:05:31 来源: 作者: 【 】 浏览:4
Tags:CodeForces 449C Jzzhu and Apples 数学 素数

这道题目晚上本来就花了很多把都××了,着实觉得自己思路没错啊,回顾一下思路,给你n个数,分成两两组合一对,分成最多组如何分,但是组合的两个数 不能互素,所以呢 偶数肯定是好的了,所以先放着,先把素数给搞定,10^5所以枚举所有包含该素数因子的数,如果刚好分组则最好,不然的话其中有偶数的踢掉一个给下面的偶数处理部分,最后再处理偶数的部分,这样肯定满足组数最多,完全没有问题,后来方法确实是没问题啊,只是代码有问题,我靠!真是脑残!,今天看到一位大牛的想法,我跟他是一样的,只是代码写搓了,后来改了又改过了,但是原本的代码真的是不能看啊,唉写的太繁琐,还是用STL方便点,10^5即使耗时点也无妨,于是敲了一把STL的,当然敲了好几次才解决错误,真弱|!清晰简洁,还不易出错,又是长记性的好题目,

?

?

?

?

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
        
          #include
         
           #include
           #include
           
             #include
            
              #include
             
               #include
              
                #define ll long long #define eps 1e-8 //const int inf = 0xfffffff; const ll inf = 1ll<<61; using namespace std; //vector
               
                 > G; //typedef pair
                
                  P; //vector
                 
                   > ::iterator iter; // //map
                  
                   mp; //map
                   
                    ::iterator p; bool isprime[100000 + 5]; int prime[100000 + 5]; int k; void init() { memset(isprime,false,sizeof(isprime)); for(int i=2;i<100005;i++) if(!isprime[i]) for(int j=i*2;j<100005;j+=i) isprime[j]=true; for(int i=2;i<100005;i++) if(!isprime[i]) prime[k++]=i; } int n; vector
                    
                      > G; void clear() { memset(isprime,false,sizeof(isprime)); G.clear(); } int main() { init(); while(scanf(%d,&n) == 1) { clear(); int ans = 0; vector
                     
                       tmp; vector
                      
                        ::iterator it; for(int i=1;i
                       
                         n)break; tmp.clear(); for(int j=prime[i];j<=n;j+=prime[i]) if(!isprime[j]) tmp.push_back(j); int len = tmp.size(); if(len == 1)continue; if(len&1) { for(it = tmp.begin();it != tmp.end();it++) if(*it%2 == 0) { tmp.erase(it);break; } } len = tmp.size(); for(int i=0;i
                        
                         

?

?

?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MFC C++ 获取外网IP地址 下一篇UVa 825 Walking on the Safe Sid..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: