zoukankan      html  css  js  c++  java
  • [Codeforces]Codeforces Global Round 1

    A - Parity

    题意

    给定一个$b$进制数,要求输出它在十进制下是奇数还是偶数。

    分析

    花了我略多的时间,首先题目中给的数字范围很大,不能直接转化为10进制。

    分析性质,发现只有奇数乘奇数还是奇数,其他都是偶数。

    对奇数进制和偶数进制分类讨论。

    偶数进制看最低位的奇偶性,如果是奇数那么这个数就是奇数,不然是偶数。

    奇数进制看每一位上奇数的个数,如果是奇数个奇数就是奇数,不然是偶数。

    代码

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N=1e5+1009;
     4 int read(){
     5     char c;int num,f=1;
     6     while(c=getchar(),!isdigit(c))if(c=='-')f=-1;num=c-'0';
     7     while(c=getchar(), isdigit(c))num=num*10+c-'0';
     8     return f*num;
     9 }
    10 int n,Base,v[N];
    11 bool f1,f2;
    12 int main()
    13 {
    14     Base=read();n=read();
    15     for(int i=n-1;i>=0;i--)v[i]=read();
    16     f1=Base&1;f2=0;
    17     if(!f1){
    18         f2=v[0]&1;
    19         if(f2)printf("odd
    ");
    20         else printf("even
    ");
    21     }else{
    22         for(int i=0;i<=n-1;i++)
    23             if(v[i]&1)
    24                 f2=!f2;
    25         if(f2)printf("odd
    ");
    26         else printf("even
    ");
    27     }
    28     return 0;
    29 }
    View Code

    B - Tape

    题意

    给定一条线段,上面有$n$个点,你有$k$条线段(任意长度)可以使用,求覆盖所有点的最小线段长度和。

    分析

    一开始想用DP,秒得方程,但是复杂度是$O(n^2)$,想到用数据结构优化。

    后来觉得B题不会这么难吧,仔细分析性质,每一个线段的两端肯定是两个点(显然)

    然后每个点肯定仅由一条线段覆盖(显然)

    那么问题就转化为了在题目中给的$n-1$个间隔中,选择$n-k$个间隔未被覆盖,其余的用线段覆盖。

    然后排序一下就可以了。。

    代码

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N=5e5+1009;
     4 int read(){
     5     char c;int num,f=1;
     6     while(c=getchar(),!isdigit(c))if(c=='-')f=-1;num=c-'0';
     7     while(c=getchar(), isdigit(c))num=num*10+c-'0';
     8     return f*num;
     9 }
    10 int n,m,k,sum;
    11 int a[N],dis[N];
    12 int main()
    13 {
    14     n=read();m=read();k=read();
    15     for(int i=1;i<=n;i++)a[i]=read();
    16     for(int i=1;i<=n;i++)dis[i]=a[i]-a[i-1];
    17     sort(dis+2,dis+n+1);
    18     for(int i=2;i<n-k+2;i++)
    19         sum+=dis[i];
    20     printf("%d
    ",sum+k);
    21     return 0;
    22 }
    View Code

    C - Meaningless Operations

    题意

    给定$q$个数,要求每个数$a$找到一个$b(1le b< a)$使得$gcd(a$ $xor$ $b,a$ $and$ $b)$最大。

    分析

    我们分两类讨论。

    第一类:$a$不是$2^k-1$时,这时候我们发现我们只要让$a$ $and$ $b=0$,$a$ $xor$ $b=2^k-1$就可以了。

    重点在第二类:打表找规律,发现如果$a$是质数时,答案为$1$,否则答案为$a$的最大真因子。

    我怕$a$很大又是质数的时候可能会超时,用的是Miller-Rabbin算法判断的质数。

    代码

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const ll test[109]={2,3,5,7,11,61,24251,13,17,23};
     5 ll read(){
     6     char c;ll num,f=1;
     7     while(c=getchar(),!isdigit(c))if(c=='-')f=-1;num=c-'0';
     8     while(c=getchar(), isdigit(c))num=num*10+c-'0';
     9     return f*num;
    10 }
    11 ll Pow(ll a,ll p,ll mod){
    12     ll ans=1;
    13     for(;p;p>>=1,a=1ll*a*a%mod)
    14         if(p&1)ans=1ll*ans*a%mod;
    15     return ans;
    16 }
    17 bool check(ll P){
    18     if(P==1)return 0;
    19     ll k=0,t=P-1;
    20     while(!(k&1))k++,t>>=1;
    21     for(int i=0;i<10;i++){
    22         if(P==test[i])return 1;
    23         ll a=Pow(test[i],t,P),nxt;
    24         for(int j=1;j<=k;j++){
    25             nxt=(1ll*a*a)%P;
    26             if(nxt==1&&a!=1&&a!=P-1)return 0;
    27             a=nxt;
    28         }
    29         if(a!=1)return 0;
    30     }
    31     return 1;
    32 }
    33 int ct(ll x){
    34     ll t=1;int flag=0;
    35     while(t<=x){
    36         if((x&t)==0)flag=1;
    37         t<<=1;
    38     }
    39     if(flag)return t;
    40     else return -1;
    41 }
    42 int main()
    43 {
    44     int q=read();
    45     for(int i=1;i<=q;i++){
    46         ll a=read();
    47         ll b=ct(a);
    48         if(!(~b)){
    49             if(check(a))printf("1
    ");
    50             else {
    51                 for(ll i=2;i<a;i++){
    52                     if(a%i==0){
    53                         cout<<(a/i)<<endl;
    54                         break;
    55                     }
    56                 }
    57             }
    58         }else cout<<(b-1)<<endl;
    59     }
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    不依赖OFFICE组件实现带图片的EXCEL导出
    关于安装SQL的错误
    Web开发学习点滴(持续更新)
    窗体间传值汇总
    沈阳.NET俱乐部MSN群开张了。。。
    VoIP协议标准浅析
    名词解释
    创建和运行一个解决方案
    400电话为什么叫免费电话?
    XPO基础简化的属性语法:
  • 原文地址:https://www.cnblogs.com/onglublog/p/10355788.html
Copyright © 2011-2022 走看看