CodeforcesRound#337(Div. 2)

终于等到了一场不是凌晨开始的CF了~(≧▽≦)/~
读题慢,手速慢,破题慢,代码实现能力不够,一AC不行,rating掉……
题目链接

第一题:有一个根长度为 n 的木棍,将它做成一个矩形(不能是正方形)。求有多少种方案(长和宽交换是一种)。

水题一道。

#include <iostream>
#include <cstdio>
using namespace std;
int n;
int main()
{
    scanf("%d",&n);
    if(n<=4||n%2)
    {
        puts("0");
        return 0;
    }
    n/=2;
    printf("%d\n",(n-1)/2);
    return 0;
}

第二题:有1~ n 种数,第i个数有 ai 个。现构造一个序列,要求是 1 ~n的循环( 4 5 1 2 3 4 5 1 2 3 4 5 1 ……)。求序列的最长长度。

水题一道。先求出完整的周期,即min(ai)。然后再求出最长连续1的最长长度(首尾相连)。特别注意要开long long int,用%I64d输出。

#include <iostream>
#include <cstdio>
#define MAXN 200005
#define LL long long int
using namespace std;

int cnt[MAXN], m=2147483647, before, add, add2;
LL ans, n;

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&cnt[i]);
        m=min(m,cnt[i]);
    }
    for(int i=1;i<=n;++i)cnt[i]-=m;
    for(int i=1;i<=n+1;++i)
        if(cnt[i]==0)
        {
            add=max(add,i-before-1);
            before=i;
        }
    for(int i=1;i<=n;++i)
        if(cnt[i])++add2;
        else break;
    for(int i=n;i>0;--i)if(cnt[i])++add2;else break;
    ans=n*m+max(add,add2);
    printf("%I64d\n",ans);
    return 0;
}

第三题:构造一个 2k 2k 维的向量,要求向量之间两两互质。( 0<=k<=9

找规律。先打一个小表。
这里写图片描述
发现第 i 个答案到第i+1个答案就是将第 i 个矩阵复制两次,然后横向翻转,对右下角的小矩阵取反。
这里写图片描述

#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 1005
using namespace std;

int k;
bool w[MAXN][MAXN];

int main()
{
    scanf("%d",&k);
    if(k==0)
    {
        puts("+");
        return 0;
    }
    w[1][1]=w[2][1]=w[2][2]=1, w[1][2]=0;
    for(int l=2,i;l<=k;++l)
    {
        i=l-1;
        i=1<<i;
        for(int j=1;j<=i;++j)
            memcpy(w[j+i],w[j],sizeof w[j]);
        for(int j=1;j<=i;++j)
        {
            for(int k=1;k<=i;++k)
                w[j][i+i-k+1]=w[j][k];
        }
        for(int j=i+1;j<=i+i;++j)
        {
            for(int k=1;k<=i;++k)
                w[j][i+i-k+1]=!w[j][k];
        }
    }
    int tmp=1<<k;
    for(int i=1;i<=tmp;++i)
    {
        for(int j=1;j<=tmp;++j)
        {
            if(w[i][j])printf("+");
            else printf("*");
        }
        puts("");
    }
    return 0;
}

之后的题,就是木有在当时做出来的…
%%现场AK的大牛。

第四题:在xoy坐标系中有n条平行于坐标轴的直线,求这些直线覆盖了多少个整点。

大牛们说这是一个裸的矩形面积并,扫描线。

就是确定以 x 轴还是以y轴为基准,然后另一个方向的线就一个一个扫描走。

第五题:先给你一个字符串,然后有两种操作。
操作一:将字符串中的某一段全部改成同一个字符。
操作二:给你另一个字符串,求至少需要将该字符串复制多少次才能使得原字符串是该字符串的子序列。

大牛们说这又是一道线段覆盖的裸题233

这样看来蒟蒻有关线段覆盖的问题根本就木有这么学……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值