Codeforces Round #451 (Div. 2) a - c

a.

题解:水题,判断该数模除10 ,与10 - 该数模除10 比较谁更小,输出小的那种情况

 

代码如下:

  1. #include <iostream>  
  2. #include <stdio.h>  
  3. #include <stack>  
  4. #include <math.h>  
  5. #include <map>  
  6. #include <algorithm>  
  7. #include <string.h>  
  8. using namespace std;  
  9. const double PI=acos(-1);  
  10.   
  11. int main()  
  12. {  
  13.     int n;  
  14.     scanf("%d",&n);  
  15.     int m=n%10;  
  16.     if(m<=10-m)  
  17.         printf("%d\n",n-m);  
  18.     else  
  19.         printf("%d\n",n+10-m);  
  20.     return 0;  
  21. }  


b .

题意: 扩展欧几里德 ,但一直改不对,发现 数据最大1e7 1000ms 不会超时,故用暴力 ac

 

代码如下:

  1. #include <iostream>  
  2. #include <stdio.h>  
  3. using namespace std;  
  4. typedef long long ll;  
  5. void gcd(ll a,ll b,ll &d,ll &x,ll &y)  
  6. {  
  7.     if(!b)  
  8.     {  
  9.         d=a;x=1;y=0;  
  10.     }  
  11.     else  
  12.     {  
  13.         gcd(b,a%b,d,y,x);  
  14.         y-=x*(a/b);  
  15.     }  
  16. }  
  17. int main()  
  18. {  
  19.   
  20.     ll n,a,b,x,y,g;  
  21.     cin>>n>>a>>b;  
  22.     gcd(a,b,g,x,y);  
  23.     if(n%g)  
  24.         puts("NO");  
  25.     else  
  26.     {  
  27.         int flag=1;  
  28.         if(n%a==0)  
  29.         {  
  30.             puts("YES");  
  31.             printf("%I64d 0\n",n/a);  
  32.         }  
  33.         else if(n%b==0)  
  34.         {  
  35.             puts("YES");  
  36.             printf("0 %I64d\n",n/b);  
  37.         }  
  38.         else  
  39.         {  
  40.             for(ll i=1;i<=10000000;i++) // main code  
  41.             {  
  42.                 if((n-a*i)>=0&&(n-a*i)%b==0)  
  43.                 {  
  44.                     puts("YES");  
  45.                     printf("%I64d %I64d\n",i,(n-a*i)/b);  
  46.                     flag=0;  
  47.                     break;  
  48.                 }  
  49.             }  
  50.             if(flag)  
  51.                 puts("NO");  
  52.         }  
  53.     }  
  54.     return 0;  
  55. }  


题解:

更是暴力,可以直接开数组暴力,但我用的set 和 map 优化了一下,将 那些字符串判断一下不是任何字符串的后缀 即可

 

代码如下:

  1. #include <iostream>  
  2. #include <set>  
  3. #include <map>  
  4. #include <string.h>  
  5. #include <vector>  
  6. using namespace std;  
  7.   
  8. int lk(string str,string str1) // 判断str 是否是str1的后缀  
  9. {  
  10.     int len=str.length(),len1=str1.length();  
  11.     if(len>=len1)  
  12.         return 0;  
  13.     for(int i=0;i<len;i++)  
  14.         if(str[len-1-i]!=str1[len1-1-i])  
  15.             return 0;  
  16.     return 1;  
  17. }  
  18. int main()  
  19. {  
  20.     set<string>s;  
  21.     map<string,set<string> >my;  
  22.     s.clear();  
  23.     int n,m;  
  24.     string name,str;  
  25.     cin>>n;  
  26.     for(int i=0;i<n;i++)  
  27.     {  
  28.         cin>>name>>m;  
  29.         s.insert(name);  
  30.         for(int j=0;j<m;j++)  
  31.         {  
  32.             cin>>str;  
  33.             my[name].insert(str);  
  34.         }  
  35.     }  
  36.     cout<<s.size()<<endl;  
  37.     set<string>::iterator it1;  
  38.     set<string>::iterator it2;  
  39.     vector<string>v1;  
  40.     vector<string>v2;   
  41.     for(it1=s.begin();it1!=s.end();it1++)  
  42.     {  
  43.         v1.clear();  
  44.         v2.clear();  
  45.         cout<<*it1<<" ";  
  46.         for(it2=my[*it1].begin();it2!=my[*it1].end();it2++)  
  47.             v1.push_back(*it2);  
  48.         for(int i=0;i<v1.size();i++)  
  49.         {  
  50.             int flag=0;  
  51.             for(int j=0;!flag&&j<v1.size();j++)  
  52.                 if(i!=j)  
  53.                 {  
  54.                     if(lk(v1[i],v1[j]))  
  55.                         flag=1;  
  56.                 }  
  57.             if(!flag)  
  58.                 v2.push_back(v1[i]);  
  59.         }  
  60.         cout<<v2.size()<<" ";  
  61.         for(int i=0;i<v2.size();i++)  
  62.         {  
  63.             if(i==v2.size()-1)  
  64.                 cout<<v2[i]<<endl;  
  65.             else  
  66.                 cout<<v2[i]<<" ";   
  67.         }   
  68.   
  69.     }  
  70.     return 0;  
  71. }  


 

init:看样子以后要首选lk暴力试探法啦。。。。。。

posted @ 2017-12-17 12:43  jadelemon  阅读(129)  评论(0编辑  收藏  举报