首页 > 其他分享 >acwing第67场周赛

acwing第67场周赛

时间:2022-09-05 11:11:23浏览次数:89  
标签:周赛 拼成 int 67 火柴 操作 include acwing

1.火柴棍数字

原题链接:https://www.acwing.com/problem/content/4612/

思路

利用n根火柴拼成最大的数字
数字位数越大,数字的值就越大
1只用两根火柴就可以拼成,所以就看n根火柴可以拼成多少根1
n为偶数:拼成的数字为\(n/2\)位
n为奇数:拼成的数字也为\(n/2\)位,但多余出来一根火柴,这时就把这根多余出来的火柴和第一位的两根火柴拼成7即可

即:
n为偶数:\(n/2\)位1
n为奇数:第1位为7加上\(n/2-1\)位1

string构造函数

string( size_type length, char ch )

代码:
	cout << string(5,'c');
显示:
	ccccc
代码
#include<iostream>
#include<cstring>

using namespace std;

int main()
{
    int m,n;
    cin >> m;
    while(m --)
    {
        cin >> n;
        
        if(n % 2)
        {
            cout << '7' + string(n/2 - 1,'1') << endl;
        }
        else cout << string(n/2,'1') << endl;
    }
    
    return 0;
}

2.列表排序

原题链接:https://www.acwing.com/problem/content/4613/

思路

第一种操作:只交换每一行的两个数,每一行只能交换一次
第二种操作:交换两列数,只能进行一次操作

如果只看第一种操作
可以发现,只要一行中不在相应位置上的数的个数超过两个,那就无解,否则肯定有解

我们可以先进行第二种操作,然后去判断第一种操作之后是否有解

进行第二种操作一共有 \(C_{m}^{2} + 1\) 种操作(选两列,或者不交换),数据范围比较小,直接暴力枚举即可

代码
#include<iostream>
#include<algorithm>

using namespace std;

const int N = 25;
int g[N][N];
int n,m;

bool check()
{
    int cnt;
    for(int i = 1; i <= n; i ++)
    {
        cnt = 0;
        for(int j = 1; j <= m; j ++)
        {
            if(g[i][j] != j) cnt ++;
            if(cnt > 2) return false;
        }
    }
    return true;
}

int main()
{
    cin >> n >> m;
    
    for(int i = 1; i <= n; i ++)
    {
        for(int j = 1; j <= m; j ++)
        {
            cin >> g[i][j];
        }
    }
    
    // 枚举第二种操作
    for(int i = 1; i <= m; i ++)
    {
        for(int j = i; j <= m; j ++)
        {
            for(int k = 1; k <= n; k ++) swap(g[k][i],g[k][j]);
            if(check()) 
            {
                puts("YES");
                return 0;
            }
            for(int k = 1; k <= n; k ++) swap(g[k][i],g[k][j]); // 一定要记得恢复现场
        }
    }
    puts("NO");
    return 0;
}

标签:周赛,拼成,int,67,火柴,操作,include,acwing
From: https://www.cnblogs.com/rdisheng/p/16657402.html

相关文章

  • acwing第66场周赛
    1.判断奇偶原题链接:https://www.acwing.com/problem/content/4609/判断就就直接%2即可#include<iostream>usingnamespacestd;intmain(){strings;fo......
  • leetcode 674 最长连续递增序列 C/C++ 动态规划,动态规划空间优化,双指针 三种解法,初识
    #if 0class Solution {  //动态规划public:    int findLengthOfLCIS(vector<int>& nums) {        vector<int> dp(nums.size());     ......
  • AtCoder Beginner Contest 267 解题报告
    A-Saturday题意:输入字符串代表周一至周五的某一天,输出这一天离周六还有多少天分析:映射一下,直接输入输出ac代码:#include<iostream>#include<algorithm>#inclu......
  • AtCoder Beginner Contest 267
    E-ErasingVertices2做法1观察可得:对于某个时刻,贪心删当前代价最小的点肯定是最优的。但是删一个点会减少相邻接的点的代价。然后就想到了堆,但是这个堆需要支持decre......
  • AtCoder Beginner Contest 267 E Erasing Vertices 2
    ErasingVertices2二分||贪心二分的做法就二分答案,然后检查一下能否删除,像拓扑一下跑一下就行#include<iostream>#include<cstdio>#include<algorithm>#includ......
  • acwing语法基础课第二讲!
    课堂笔记倒是没有多少,这节的知识点不是很多。我在做题的时候遇见了好几个不会的,如下:scanf("%%"),这里面的%%虽然是两个%%但是呢,只能输出一个%,具体原理我不知道,但是我......
  • ABC267总结
    比赛链接比赛情况AC:6/8题目分析A(语法入门)打表周一到周五即可B(基础算法)按照题意计算即可假如1号球没倒,则非法否则分别找最左和最右分别没倒的列,判断中间是否有一......
  • 第 66 场周赛
    A奇偶判断intmain(){ strings;cin>>s; intx=s[6]-'0'; if(x%2)cout<<1<<endl; elsecout<<0<<endl; return0;}B字母补全思路:依次枚......
  • AcWing 802.区间和
    题目链接:https://www.acwing.com/problem/content/804/好像理解了,但又没完全理解....写个题解再好好理解一下。百度说:离散化,把无限空间中有限的个体映射到有限的空间中去......
  • acwing语法基础课第一讲
    这堂课主要讲的是输入输出,以及顺序语句。以上,是我的笔记,包括课堂笔记以及后来做题总结的知识点。我需要强调的是!啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊......