• Codeforces-Round#589 Div2


    A题 Distinct Digits

    题解:

    暴力水题

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int f[10];
     4 bool judge(int x)
     5 {
     6     memset(f,0,sizeof(f));
     7     while(x){
     8         f[x%10]++;
     9         if(f[x%10]>1)return false;
    10         x/=10;
    11     }
    12     return true;
    13 }
    14 int main()
    15 {
    16     memset(f,0,sizeof(f));
    17     int l,r;cin>>l>>r;
    18     for(int i=l;i<=r;i++)
    19     {
    20         if(judge(i)){
    21             cout<<i<<endl;
    22             return 0;
    23         }
    24     }
    25     cout<<-1<<endl;
    26     return 0;
    27 }
    View Code

    B题 Filling the Grid

    题解:

    模拟水题,先按列放置黑色格子,外围一圈放上白色格子,

    再按行放置黑色格子,若冲突则不成立。

     1 #include<bits/stdc++.h>
     2 #define MAXN 2000
     3 #define ll long long
     4 
     5 using namespace std;
     6 const int MOD=1000000007;
     7 int dp[2000][2000];
     8 int main()
     9 {
    10     vector<int>r,c;
    11     for(int i=0;i<MAXN;i++)
    12     for(int j=0;j<MAXN;j++)
    13         dp[i][j]=2;
    14     int h,w;cin>>h>>w;
    15     for(int i=0;i<h;i++)
    16     {
    17         int num;cin>>num;
    18         for(int j=1;j<=num;j++)
    19         {
    20             dp[i+1][j]=1;
    21         }
    22         dp[i+1][num+1]=0;
    23     }
    24     for(int i=0;i<w;i++)
    25     {
    26         int num;cin>>num;
    27         for(int j=1;j<=num;j++)
    28         {
    29             if(dp[j][i+1]==0){
    30                 cout<<0<<endl;
    31                 return 0;
    32             }
    33             dp[j][i+1]=1;
    34         }
    35         if(dp[num+1][i+1]==1){
    36             cout<<0<<endl;
    37             return  0;
    38         }
    39         else dp[num+1][i+1]=0;
    40     }
    41     ll ans=1;
    42     for(int i=1;i<=h;i++)
    43     {
    44         for(int j=1;j<=w;j++)
    45         {
    46             if(dp[i][j]==0)continue;
    47             ans=(ans*dp[i][j])%MOD;
    48         }
    49     }
    50     cout<<ans%MOD<<endl;
    51     return 0;
    52 }
    View Code

    C题 Primes and Multiplication

    题解:

    求n范围内质因子的个数和的次方的乘积

    先求出x的质因子,然后从1-n范围内求出质因子的k次方的和

    快速求出n!内的质因子个数

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 
     4 using namespace std;
     5 const ll MOD=1000000007;
     6 ll n,x;
     7 ll result  = 1;
     8 vector<int>prime;
     9 vector<ll> factor(ll n){
    10     vector<ll>f;
    11     for(ll i=2;i*i<=n;i++)
    12         if(n%i==0)
    13         {
    14             f.push_back(i);
    15             while(n%i==0)
    16                     n/=i;
    17         }
    18         
    19     if(n>1)
    20         f.push_back(n);
    21     return f;
    22 }
    23 ll q_pow(ll a,ll b){
    24     ll sum=1%MOD;
    25     a%=MOD;
    26         while(b)
    27         {
    28             if(b&1)
    29                 sum=(sum*1ll*a)%MOD;
    30             a=a*1ll*a%MOD;
    31             b>>=1;
    32         }
    33     return sum;
    34 }
    35 int main()
    36 {
    37     cin>>x>>n;
    38     vector<ll>prime=factor(x);//求质因子
    39     ll ans=1;
    40     for(int i = 0; i<prime.size(); i++)
    41     {
    42         ll nn=n;
    43         while(nn>=prime[i]){
    44             // cout<<nn/prime[i]<<endl;
    45             ans=ans*q_pow(prime[i],nn/prime[i])%MOD;
    46             // cout<<ans<<endl;
    47             nn/=prime[i];
    48         }
    49     }
    50     cout << ans%MOD << endl;
    51     
    52     return 0;
    53 }
    View Code

    D题 Complete Tripartite

    题解:

    暴力染色,先把所有的点放在集合1,遍历所有的点,颜色相同的联通点,把后一个点放入color++的集合。

    判断:3个集合均有点,且没有点放在集合4;点图互相连通,即强连通图,m=v1*v2+v2*v3+v3*v1

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define MAXN 100010
     4 // typedef struct{
     5 //     int from,to;
     6 //     int next,color;
     7 // }EDGE;
     8 // EDGE edges[MAXN];
     9 typedef struct{
    10     int u,color;
    11     set<int>v;
    12 }NODE ;
    13 NODE nodes[MAXN];
    14 int cnt=1,n,m;
    15 int head[MAXN];
    16 void add(int u,int v)
    17 {
    18     nodes[u].v.insert(v);
    19     nodes[v].color=2;
    20 }
    21 int main()
    22 {
    23     cin>>n>>m;
    24     for(int i=0;i<m;i++)
    25     {
    26         int a,b;scanf("%d%d",&a,&b);
    27         add(a,b);
    28         add(b,a);
    29     }
    30     for(int i=0;i<MAXN;i++)
    31         nodes[i].color=1;
    32     for(int i=1;i<=n;i++){
    33         for(int j:nodes[i].v){
    34             if(nodes[i].color==nodes[j].color)
    35             {
    36                 nodes[j].color++;
    37             }
    38         }
    39     }
    40     int a[4]={0,0,0,0};
    41     for(int i=1;i<=n;i++){
    42         a[nodes[i].color]++;
    43         if(nodes[i].color>3||nodes[i].v.empty()){
    44             cout<<"-1"<<endl;
    45             return 0;
    46         }
    47     }
    48     if(!a[1]||!a[2]||!a[3]||m!=(a[1]*a[2]+a[2]*a[3]+a[3]*a[1]))//判断是否是强连通图
    49     {
    50         cout<<-1<<endl;
    51         return 0;
    52     }
    53     for(int i=1;i<=n;i++)
    54     {
    55         cout<<nodes[i].color<<" ";
    56     }
    57     
    58 
    59     return 0;
    60 }
    View Code
  • 相关阅读:
    MongoDB 启动和关闭
    java protostuff 序列化反序列化工具
    第一天
    第六章
    第六章
    第六章
    第六章
    第五章---面向对象---1.软件开发/2.异常处理/3.try...except的详细用法
    第五章-面向对象-1.元类介绍/2.自定义元类控制类的行为/3.控制类的实例化行为/4.控制类的实例化行为的应用
    第五章---面向对象---1.绑定方法与非绑定方法介绍/2.绑定方法与非绑定方法应用/3.反射/4.内置方法
  • 原文地址:https://www.cnblogs.com/tldr/p/11614424.html
Copyright © 2020-2023  润新知