zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 170

    A:

    找出第几位数是0.

     1 #include <iostream>
     2 using namespace std;
     3 int main(void)
     4 {
     5     for(int i=1;i<=5;i++)
     6     {
     7         int x;
     8         cin>>x;
     9         if(x==0)
    10         {
    11             cout<<i<<endl;
    12         }
    13     }
    14     return 0;
    15 }

    B:

    鸡兔同笼,判断是否合理。

     1 #include <iostream>
     2 using namespace std;
     3 int x,y;
     4 int main(void)
     5 {
     6     cin>>x>>y;
     7     if(4*x<y||y<2*x)cout<<"No"<<endl;
     8     else
     9     {
    10         if((4*x-y)%2)cout<<"No"<<endl;
    11         else cout<<"Yes"<<endl;
    12     }
    13     return 0;
    14 }

    C:

    找出距离X最近的没有出现的数。注意答案可能是101.

     1 #include <iostream>
     2 #include <cmath>
     3 using namespace std;
     4 int x,n,a[110];
     5 int main(void)
     6 {
     7     cin>>x>>n;
     8     for(int i=1;i<=n;i++)
     9     {
    10         int y;
    11         cin>>y;
    12         a[y]=1;
    13     }
    14     int minn=110,now=110;
    15     for(int i=105;i>=0;i--)
    16     {
    17         if(!a[i]&&(fabs(i-x)<minn||fabs(i-x)==minn&&i<now))
    18         {
    19             minn=fabs(i-x);
    20             now=i;
    21         }
    22     }
    23     cout<<now<<endl;
    24 }

    D:

    找出数列中不是其他数的倍数的数的个数(拗口)。用小数筛大数。

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 int n,a[2100000],ans;
     5 int main(void)
     6 {
     7     cin>>n;
     8     for(int i=1;i<=n;i++)
     9     {
    10         int x;
    11         cin>>x;
    12         a[x]++;
    13     }
    14     for(int i=1;i<=1000000;i++)
    15     {
    16         if(a[i]==1)ans++;
    17         if(a[i]>0)
    18         {
    19             for(int j=i;j<=1000000;j+=i)
    20             {
    21                 a[j]=0;
    22             }
    23         }
    24     }
    25     cout<<ans<<endl;
    26 }

    E:

    对每次变换求所有集合最大值中的最小值。用s[]表示各个集合,m表示最大值集合,每次对集合元素删除加入。注意元素有可能相同,所以要用multiset.

     1 #include <iostream>
     2 #include <set>
     3 using namespace std;
     4 int a[210000],k[210000],n,q,num,to;
     5 multiset <int>s[210000];
     6 multiset <int>m;
     7 int main(void)
     8 {
     9     cin>>n>>q;
    10     for(int i=1;i<=n;i++)
    11     {
    12         cin>>a[i]>>k[i];
    13         s[k[i]].insert(a[i]);
    14     }
    15     for(int i=1;i<=200000;i++)
    16     {
    17  
    18         if(s[i].size()>0)
    19         {
    20             m.insert(*(s[i].rbegin()));
    21         }
    22     }
    23     for(int i=1;i<=q;i++)
    24     {
    25         cin>>num>>to;
    26         m.erase(m.find(*s[k[num]].rbegin()));
    27         s[k[num]].erase(s[k[num]].find(a[num]));
    28         if(s[k[num]].size()>0)m.insert(*s[k[num]].rbegin());
    29         if(s[to].size()>0)m.erase(m.find(*s[to].rbegin()));
    30         s[to].insert(a[num]);
    31         m.insert(*s[to].rbegin());
    32         k[num]=to;
    33         cout<<*(m.begin())<<endl;
    34     }
    35     return 0;
    36 }

    F:

    bfs模拟,要注意方向,因为方向不同可能会导致跳过正确路线(迷了好久)。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <vector>
     4 using namespace std;
     5 int H,w,k,X,Y,xx,yy,maxx=23333333;
     6 int q[4]={-1,0,1,0};
     7 int p[4]={0,1,0,-1};
     8 vector<int>l[3];
     9 int main(void)
    10 {
    11     cin>>H>>w>>k>>xx>>yy>>X>>Y;
    12     xx--;yy--;X--;Y--;
    13     char c[H][w];
    14     int f[H][w];
    15     for(int i=0;i<H;i++)
    16     {
    17         for(int j=0;j<w;j++)
    18         {
    19             cin>>c[i][j];
    20             f[i][j]=maxx;
    21         }
    22     }
    23     int h=0,r=1;
    24     l[0].push_back(xx);l[1].push_back(yy);l[2].push_back(0);
    25     f[xx][yy]=0;
    26     while(h<r)
    27     {
    28         for(int i=0;i<4;i++)
    29         {
    30             int x1=l[0][h],y1=l[1][h];
    31             for(int j=0;j<k;j++)
    32             {
    33                 x1+=q[i];y1+=p[i];
    34                 if(x1<0||x1>=H||y1<0||y1>=w||c[x1][y1]=='@'||f[x1][y1]<l[2][h]+1)break;
    35                 if(f[x1][y1]>l[2][h]+1)
    36                 {
    37                 f[x1][y1]=l[2][h]+1;
    38                 l[0].push_back(x1);l[1].push_back(y1);l[2].push_back(l[2][h]+1);
    39                 r++;
    40                 }
    41             }
    42         }
    43         h++;
    44     }
    45     if(f[X][Y]==maxx)cout<<"-1"<<endl;
    46     else cout<<f[X][Y]<<endl;
    47     return 0;
    48 }
  • 相关阅读:
    leetcode74
    leetcode59
    leetcode1283
    0079. Word Search (M)
    0067. Add Binary (E)
    0203. Remove Linked List Elements (E)
    用async 解放你的大脑
    Python 类属性和方法
    Python 类装饰器
    Python 装饰器
  • 原文地址:https://www.cnblogs.com/yanying7/p/13134369.html
Copyright © 2011-2022 走看看