杭电OJ 1021 mod意识

Problem Description
The least common multiple (LCM) of a set of positive integers is the smallest positive integer which is divisible by all the numbers in the set. For example, the LCM of 5, 7 and 15 is 105.

 

Input
Input will consist of multiple problem instances. The first line of the input will contain a single integer indicating the number of problem instances. Each instance will consist of a single line of the form m n1 n2 n3 ... nm where m is the number of integers in the set and n1 ... nm are the integers. All integers will be positive and lie within the range of a 32-bit integer.
 

Output
For each problem instance, output a single line containing the corresponding LCM. All results will lie in the range of a 32-bit integer.
 

Sample Input
  
  
2 3 5 7 15 6 4 10296 936 1287 792 1
 

Sample Output
  
  
105 10296




这题第一次提交的时候显示的是WA,原因在于第一次没有对操作数a,b取模,导致a,b早就超出了int 可以表示的范围,同时这个错误很隐蔽,我通过输出b(两个操作数中大的那个 )的值才发现正负交错,早就越界了!

所以对于与mod有关的题目,一定要有对操作数提早取模的意识!


AC代码

[cpp]  view plain  copy
  1. #include <iostream>  
  2. #include <algorithm>  
  3. using namespace std;  
  4.   
  5. class Num  
  6. {  
  7. public:  
  8.     int value;  
  9.     int sub;  
  10.     bool type;  
  11.     Num()  
  12.     {  
  13.         value=-1;  
  14.         sub=-1;  
  15.         type=false;  
  16.     }  
  17. };  
  18.   
  19. bool Less(Num a, Num b)  
  20. {  
  21.     return a.value<b.value;  
  22. }  
  23.   
  24. bool Less2(Num a,Num b)  
  25. {  
  26.     return a.sub<b.sub;  
  27. }  
  28.   
  29.   
  30. Num A[1000000];  
  31. int main()  
  32. {  
  33.   
  34.     int i=0;  
  35.     int temp;  
  36.     int a=1;  
  37.     int b=2;  
  38.     int n;  
  39.     int k=0;  
  40.     bool flag=true;   
  41.     while(cin>>temp)  
  42.     {  
  43.         A[i].value=temp;  
  44.         A[i].sub=i;  
  45.         i++;  
  46.     }  
  47.     sort(A,A+i,Less);  
  48.     for(n=2;n<=A[i-1].value&&k<i;)  
  49.     {  
  50.         if(A[k].value==0)  
  51.         {  
  52.             k++;  
  53.         }  
  54.         else if(A[k].value==1)  
  55.         {  
  56.             k++;  
  57.         }  
  58.         else  
  59.         {  
  60.             if(flag==true)  
  61.             {  
  62.                 temp=b;  
  63.                 b=(b+a)%3;  
  64.                 a=temp;  
  65.                 flag=false;  
  66.   
  67.   
  68.             }  
  69.             if(n==A[k].value)  
  70.             {  
  71.                 if(b%3==0)  
  72.                     A[k].type=true;  
  73.                 k++;  
  74.                   
  75.             }  
  76.         }  
  77.         if(k>=i)  
  78.             break;  
  79.         if(n<A[k].value)  
  80.         {  
  81.             n++;  
  82.             flag=true;  
  83.         }  
  84.     }  
  85.     sort(A,A+i,Less2);  
  86.     for(int j=0;j<i;j++)  
  87.     {  
  88.         if(A[j].type)  
  89.             cout<<"yes"<<endl;  
  90.         else  
  91.             cout<<"no"<<endl;  
  92.     }  
  93. }  
  94.   
  95.   
  96.   
  97.   
  98.   
  99.   
  100.   
  101.   
  102.   
  103.   
  104.   
  105.   
  106.   
  107.   
  108.   
  109.               
  110.   
  111.               
  112.           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值