zoukankan      html  css  js  c++  java
  • BestCoder Valentine's Day Round

      昨晚在开赛前5分钟注册的,然后比赛刚开始就掉线我就不想说了(蹭网的下场……),只好用手机来看题和提交,代码用电脑打好再拉进手机的(是在傻傻地用手机打了一半后才想到的办法)。

      1001,也就是 hdu 5174,题意很难叙述了,自己看题吧,这题有数据溢出的风险,我竟然是AC了一发才发觉的(只过了小数据),幸好后来改后赶紧再交一遍才不至于被人hack,因为需要对数据去重,我不想用数组模拟,便尝试下用 map了,可是我的奇葩 map ( ~′⌒`~),连我自己都感到无语了:

     1 #include<cstdio>
     2 #include<map>
     3 #include<iostream>
     4 using namespace std;
     5 typedef long long LL;
     6 const int INF= 0x7fffffff;
     7 
     8 typedef map<int,int>::iterator  mit;
     9 
    10 mit operator +(const mit &p, int i)
    11 {
    12     mit it= p;
    13     return ++it;
    14 }
    15 
    16 mit operator -(const mit &p, int i)
    17 {
    18     mit it= p;
    19     return --it;
    20 }
    21 
    22 int main(){
    23     int n,i,x,k= 0;
    24     map<int,int> m;
    25     while(~scanf("%d",&n)){
    26         m.clear();
    27         for(i=1; i<=n; ++i){
    28             cin>>x;
    29             if(m.find(x)!=m.end())  ++m[x];
    30             else    m.insert(pair<int,int>(x,1));
    31         }
    32         if(m.size()==1) {
    33             printf("Case #%d: -1
    ",++k);
    34             continue;
    35         }
    36         mit st= m.begin(), it= st, ed= m.end()-1;
    37 
    38         int ans= 0;
    39         for(++it; it!=ed; ++it)
    40             if(((LL)it->first+ (it-1)->first)%INF == (it+1)->first)    ans+= it->second;
    41 
    42         if(((LL)st->first+ ed->first)%INF== (st+1)->first)  ans+= st->second;
    43         if(((ed-1)->first+ (LL)ed->first)%INF== st->first)  ans+= ed->second;
    44         printf("Case #%d: %d
    ",++k,ans);
    45     }
    46     return 0;
    47 }
    View Code

      上网找了下,发觉有个做法很不错的,用数组和 map一起模拟,不用什么 insert啊,find啊,还有连迭代器都不用,编码能力确实比我高多了,不得不赞:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <map>
     4 #include <algorithm>
     5 #define INT_MAX 2147483647
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int n, k = 1;
    11     long long ans;
    12     long long a[1000];
    13     while(~scanf("%d", &n))
    14     {
    15         ans = 0;
    16         map<int, int> mm;
    17         int cnt = 0, tmp;
    18         for(int i = 0; i < n; i++)
    19         {
    20             scanf("%d", &tmp);
    21             if(!mm[tmp])
    22             {
    23                 a[cnt++] = tmp;
    24             }
    25             mm[tmp]++;
    26         }
    27         if(cnt == 1)
    28         {
    29             printf("Case #%d: -1
    ", k++);
    30             continue;
    31         }
    32         sort(a, a+cnt);
    33         for(int i = 0 ; i < cnt; i++)
    34         {
    35             if((a[(i - 1 + cnt) % cnt] + a[(i - 2 + cnt) % cnt]) % INT_MAX == a[i])
    36             {
    37                 ans += mm[a[(i - 1 + cnt) % cnt]];
    38             }
    39         }
    40         printf("Case #%d: %d
    ", k++, ans);
    41     }
    42     return 0;
    43 }
    View Code

      1002,hdu 5175,是今天中午才做的,一开始还以为要用到什么高大上的数论定理,后来才发现不过是普通的暴力就行,枚举 n 所有的因数 i 看是否满足  gcd(n, n^i)== i 即可,真正的卡人是在输出格式上:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<algorithm>
     5 using namespace std;
     6 typedef long long LL;
     7 
     8 LL gcd(LL a, LL b)  {  return b==0? a: gcd(b,a%b);  }
     9 
    10 LL digit[200000]= {1}, ans[200000];
    11 
    12 void solve(LL n)
    13 {
    14     if(n==1){
    15         puts("0
    ");
    16         return;
    17     }
    18     int num= 0;
    19     LL m= sqrt(n+0.5);
    20     for(LL i=2; i<=m; ++i)
    21         if(n%i==0){
    22             digit[++num]= i;
    23             if(n/i!=i)  digit[++num]= n/i;
    24         }
    25     int c= 0;
    26     for(int i=0; i<=num; ++i){
    27         LL tmp= n^digit[i];
    28         if(tmp<n && gcd(n,tmp)==digit[i])   ans[c++]= tmp;
    29     }
    30     sort(ans,ans+c);
    31     printf("%d
    ",c);
    32     for(int i=0; i<c-1; ++i)
    33         printf("%I64d ",ans[i]);
    34     if(c)   printf("%I64d
    ",ans[c-1]);
    35     else    puts("");
    36 }
    37 
    38 int main()
    39 {
    40     int k=0;
    41     LL n;
    42     while(~scanf("%I64d",&n)){
    43         printf("Case #%d:
    ",++k);
    44         solve(n);
    45     }
    46     return 0;
    47 }
    View Code

      情人节,唉~也算是收到了意料之外的礼物,具体就不说了~~

  • 相关阅读:
    Python几种主流框架
    Python测试框架
    Python测试工具开发
    robotFramework——通用的自动化测试框架
    依赖数据库的单元测试——DBUnit
    SpringTest——Spring在Junit上进一步封装,集成的测试模块
    linux---网络配置
    linux-----初学命令和理解
    Liunx----vi编辑器
    虚拟机---网络设置
  • 原文地址:https://www.cnblogs.com/Newdawn/p/4292899.html
Copyright © 2011-2022 走看看