codeforces Educational Codeforces Round 56 (Rated for Div. 2) 部分题解

A. Dice Rolling

题目:

传送门A

题意:

就是求任意需要筛几次达到目标值

代码如下:
 

#include <bits/stdc++.h>
using namespace std;
int t;
int x;
int main()
{
    scanf("%d",&t);
    while (t--)
    {
        scanf("%d",&x);
        if(x%7==0)
        {

            printf("%d\n",x/7);
        }
        else
        {
            printf("%d\n",x/7+1);
        }
    }
    return 0;
}

B. Letters Rearranging

题目:
传送门B

题意:

给出一个字符串,将其中任意一个不为回文字符串的输出。

思路:
首先,看看是否都由一个字符组成,如果是,则直接输出-1.

接下来就判断是否为回文字符串,若为,则交换任意两个不同的字符,然后输出即可。

代码如下:

#include <bits/stdc++.h>
using namespace std;
int t;
char s[1005];
map<char,int>ma;
bool judge ()
{
    int len=strlen(s);
    for (int i=0;i<len/2;i++)
    {
        if(s[i]!=s[len-1-i])
            return false;
    }
    return true;
}
int main()
{
    scanf("%d",&t);
    while (t--)
    {
        scanf("%s",s);
        int len=strlen(s);
        ma.clear();
        for (int i=0;i<len;i++)
        {
            ma[s[i]]=1;
        }
        if(ma.size()==1)
        {
            printf("-1\n");
            continue;
        }
        if(!judge())
        {
            printf("%s\n",s);
        }
        else
        {
            for (int i=1;i<=len/2;i++)
            {
                if(s[0]!=s[i])
                {
                    swap(s[0],s[i]);
                    break;
                }
            }
            printf("%s\n",s);
        }
    }
    return 0;
}

C. Mishka and the Last Exam

题目:
传送门C

题意:

给出一个b数组和a数组的长度n,其中b[i]=a[i]+a[n-1-i];

输出任意一个满足条件的a数组

a数组是非递减排序的。

思路:
一开始令a[0]=0,a[n-1]=b[0],然后遍历b数组元素。

(1)如果b[i]>=b[i-1],a[i]等于在加上a[i-1]的基础上加上b[i]-b[i-1]的差值

  (2)  如果b[i]<b[i-1],则a[i]=a[i-1].

a[n-1-i]=b[i]-a[i];

代码如下:
 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2*1e+5+5;
ll b[maxn];
ll a[maxn];
int n;
int main()
{
    scanf("%d",&n);
    for (int i=0;i<n/2;i++)
    {
        scanf("%lld",&b[i]);
    }
    a[0]=0;
    a[n-1]=b[0]-a[0];
    for (int i=1;i<n/2;i++)
    {
        if(b[i]>=b[i-1])
        {
            a[i]=a[i-1]+b[i]-b[i-1];
            a[n-1-i]=b[i]-a[i];
        }
        else
        {
            a[i]=a[i-1];
            a[n-1-i]=b[i]-a[i];
        }
    }
    for (int i=0;i<n;i++)
    {
        printf("%lld%c",a[i],i==n-1?'\n':' ');
    }
    return 0;
}

  D. Beautiful Graph

题目:

传送门D

题意:
给出n个顶点,m条边,每个顶点有1,2,3个值可以选择,要求每条边所连的两个顶点的和必须为奇数,

求有多少种方法满足条件。

思路:
dfs,这题卡vector,vector建图会超时,得优化优化。就是用多少个顶点,清理多少个vector数组。

代码如下:
 

#include <bits/stdc++.h>
using namespace std;
const int maxn=3*1e5+5;
int t;
typedef long long ll;
const ll mod=998244353;
vector<int>v[maxn],re;
int n,m;
int vis[maxn];
int visnum;
int edge;
int flag;
ll ans;
int visa,visb;
void dfs (int x,int num)
{
    vis[x]=num;
    if(num%2)
        visa++;
    else
        visb++;
    int Size=v[x].size();
    for (int i=0;i<Size;i++)
    {
        int e=v[x][i];
        if(vis[e]!=-1)
        {
            if(vis[e]==num)
            {
                flag=1;
            }
        }
        else
            dfs(e,num^1);
    }
}
ll pow_mod(ll a, ll b)
{
    ll ans = 1;
    while(b){
        if(b&1){
            ans = (ans * a) % mod;
        }
        a = (a * a) % mod;
        b >>= 1;
    }
    return ans;
}
int main()
{
    scanf("%d",&t);
    while (t--)
    {
        ans=1;
        scanf("%d%d",&n,&m);
        for (int i=0;i<=n;i++)
        {
            v[i].clear();
            vis[i]=-1;
        }
        for (int i=0;i<m;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            v[x].push_back(y);
            v[y].push_back(x);
        }
        flag=0;
        for (int i=1;i<=n;i++)
        {
            if(vis[i]==-1)
            {
                visa=0;visb=0;
                dfs(i,1);
                ans*=(pow_mod(2,visa)+pow_mod(2,visb))%mod;
                ans%=mod;
            }
        }
        if(flag)
        {
            printf("0\n");
        }
        else
        {
            printf("%I64d\n",ans);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41410799/article/details/85030599
今日推荐