Codeforces Round #682 (Div. 2)(CFdiv2第一场)

一**

1

**
第一题
第一题很简单,只是读题慢了一点,他说给一个n,然后需要给出一个长度为n的数组,要求数组和能整除n,所以只要输出 n个1
就行`

#include <bits/stdc++.h>
using namespace std;
 
const int maxn = 1e6 + 10;
#define ll long long
 
int main()
{
    
    
    int t;
    cin>>t;
    while(t--)
    {
    
    
        int n;
        cin>>n;
        for(int i=1;i<n;i++)
        {
    
    
            cout<<"1 ";
        }
        cout<<1<<endl;
    }
}

2

第二题
题目要求需要
在这里插入图片描述

就是看看能不能几个加起来相等,具体看图片吧,不写了
在这里插入图片描述
很神奇,可以根据题目推出,如果存在两个相等的,就直接输出就行;繁殖不存在的话,那就很麻烦了,你就根本输出不出来这样的,就根本找不到,你不信试一下,因为,如果不存在两个相等的,那么也就是没有两个1
,那么的话就凑不出来任何一个2^m;

By smallharder, contest: Codeforces Round #682 (Div. 2), problem: (B) Valerii Against Everyone, Accepted, #, Copy
#include <bits/stdc++.h>
using namespace std;
 
const int maxn = 1e3+ 10;
#define ll long long
int a[maxn];
int main()
{
    
    
    int t;
    cin>>t;
    int n;
    while(t--)
    {
    
    
        cin>>n;
        for(int i=1;i<=n;i++)
        {
    
    
            cin>>a[i];
        }
        bool flag=false;
        sort(a+1,a+1+n);
        for(int i=2;i<=n;i++)
        {
    
    
            if(a[i]==a[i-1])
            {
    
    
                flag=true;
                break;
            }
        }
        if(flag)
        cout<<"YES"<<endl;
        else
        {
    
    
            cout<<"NO"<<endl;
        }
        
    }
}

这里找两个相等的,直接排序找就行。

3

第三题
给你一个矩阵,要求构造一个新的矩阵,新矩阵的元素要么等与原矩阵对应位置的,要么是矩阵原位置元素+1;
啊,想了将近1个多小时,傻了,只要判断奇偶性就行,哎;奇偶奇偶,然后下一行反过来就行。

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e2 + 10;
#define ll long long
ll a[maxn][maxn];
bool judge[maxn][maxn];
int main()
{
    
    
    int t;
    cin >> t;
    int n, m;
    while (t--)
    {
    
    
        cin >> n >> m;
        for (int i = 1; i <= n; i++)
        {
    
    
            for (int j = 1; j <= m; j++)
            {
    
    
                cin >> a[i][j];
            }
        }
        for (int i = 1; i <= n; i++)
        {
    
    
            if (0 == i % 2)
            {
    
    
                int flag1=1;
                for (int j = 1; j <= m; j++)
                {
    
    
                    if(flag1%2==0)
                    {
    
    
                        if(a[i][j]%2==1)
                            a[i][j]++;
                    }
                    else 
                    {
    
    
                        if(a[i][j]%2==0)
                            a[i][j]++;
                    }
                    flag1++;
                }
            }
            else
            {
    
    
                int flag1=1;
                for (int j = 1; j <= m; j++)
                {
    
    
                    if(flag1%2==0)
                    {
    
    
                        if(a[i][j]%2==0)
                            a[i][j]++;
                    }
                    else 
                    {
    
    
                        if(a[i][j]%2==1)
                            a[i][j]++;
                    }
                    flag1++;
                }
            }
        }
        for (int i = 1; i <= n; i++)
        {
    
    
            for (int j = 1; j < m; j++)
            {
    
    
                cout << a[i][j] << " ";
            }
            cout << a[i][m] << endl;
        }
    }
}

4

第四题
在这里插入图片描述
就是在n步操作内,可以让所有数相等。每一步操作就是找三个数,按顺序异或,这三个数就变成异或后的数。
大佬大佬

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int num[N];
int main()
{
    
    
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
    
    
        cin>>num[i];
    }
    if(n%2){
    
    
        cout<<"YES"<<endl<<n-1<<endl;
        for(int i=2;i<=n;i+=2){
    
    
            cout<<"1 "<<i<<" "<<i+1<<endl;
        }
        for(int i=2;i<=n;i+=2){
    
    
            cout<<"1 "<<i<<" "<<i+1<<endl;
        }
    }else{
    
    
        int xor_n=0;
        for(int i=1;i<=n;i++) xor_n^=num[i];
        if(xor_n==0){
    
    
            cout<<"YES"<<endl<<n-2<<endl;
            for(int i=2;i<n;i+=2){
    
    
                cout<<"1 "<<i<<" "<<i+1<<endl;
            }
            for(int i=2;i<n;i+=2){
    
    
                cout<<"1 "<<i<<" "<<i+1<<endl;
            }
        }else{
    
    
            cout<<"NO"<<endl;
        }
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_46264636/article/details/109686467
今日推荐