栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Codeforces Global Round 19 A-D

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Codeforces Global Round 19 A-D

过年快玩吐了,来场cf吧
A. Sorting Parts
题目很绕口,直接出结论就行。sort,如果初始给出的数组是升序的就输出no,其他情况都是yes。

#include 
#define endl 'n'
using namespace std;
typedef long long ll;
int a[10001],b[10001];
int main()
{
   ios_base::sync_with_stdio(false);
   cin.tie(NULL);
   int t,n,i,j;
   cin>>t;
   while(t--)
   {
       cin>>n;
       for(i=0;i>a[i];
          b[i]=a[i];
       }
       sort(a,a+n);
       int f=0;
       for(i=0;i 

B. MEX and Array
题意自己读吧,我虽然ac了但是没有完全读懂题意。。。
硬推样例推出来的公式,对数组按长度1 - n分别划分情况,对于每种情况答案就是按照题目所给的公式将所有元素都分开去算,最后将每次计算的结果都加起来。

#include 
#define endl 'n'
using namespace std;
typedef long long ll;
int a[101];
int main()
{
   ios_base::sync_with_stdio(false);
   cin.tie(NULL);
   int t,n,i,j;
   cin>>t;
   while(t--)
   {
       cin>>n;
       for(i=0;i>a[i];
       }
       ll ans=0;
       int p;
       for(i=1;i<=n;i++)
       {
           p=0;
           while(pn) break;
               ans=ans+i;
               for(j=p;j 

C. Andrew and Stones
有n堆石块,要将中间所有的石块都移到两边,移动方法为对于i 想复杂了,其实就是特判。这个移动方法变相的说就是两边的石子不能移动,中间的石子可以任意移动到两边。因此只有除了两边中间所有的石子堆数量全是1的时候才是-1(只要某个石子堆的数量大于等于2,它就能移出1来,循环下去把所有的奇数石子全移动到两边)当然不要忘了n=3的情况,只要中间是奇数答案就是-1。当可以求出答案时,最小移动次数其实就是对于所有奇数堆+1,偶数堆不动,然后全除2加起来就行了。

#include 
#define endl 'n'
using namespace std;
typedef long long ll;
int a[100001];
int main()
{
   ios_base::sync_with_stdio(false);
   cin.tie(NULL);
   int t,n,i,j;
   cin>>t;
   while(t--)
   {
       cin>>n;
       for(i=0;i>a[i];
       }
       ll ans=0;
       if(n==3)
       {
           if(a[1]%2!=0) cout<<"-1"< 

D. Yet Another Minimization Problem
给出a和b的数组,可以交换ai和bi,给出cost公式,输出经过交换后cost的最小值。
公式一看就很麻烦,需要推一下公式。麻烦的公式推完后发现实际上就是交换ai和bi,求ai和的平方+bi和的平方的最小值和另一个式子(这个式子和交换没有关系,它的值不会变)。
首先求出ai和bi的和sum,用sum作为01背包的容量求出交换可以产生的情况,再列一个循环求出可以交换的情况中的最小值即可。

#include 
#define endl 'n'
using namespace std;
typedef long long ll;
int a[101],b[101],dp[101][20001];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t,n,i,j;
    cin>>t;
    while(t--)
    {
        cin>>n;
        memset(dp,0,sizeof(dp));
        ll ans=0,sum=0;
        for(i=1; i<=n; i++)
        {
            cin>>a[i];
            ans=ans+a[i]*a[i]*(n-2);
            sum=sum+a[i];
        }
        for(i=1; i<=n; i++)
        {
            cin>>b[i];
            ans=ans+b[i]*b[i]*(n-2);
            sum=sum+b[i];
        }
        if(n==1)
        {
            cout<<"0"<=a[i]&&dp[i-1][j-a[i]])
                    dp[i][j]=1;
                if(j>=b[i]&&dp[i-1][j-b[i]])
                    dp[i][j]=1;
            }
        for(i=0; i<=sum; i++)
        {
            if(dp[n][i])
                ans1=min(ans1,i*i+(sum-i)*(sum-i));
        }
        cout< 

.
.
.
d没有自己做出来,前三题的罚时也很高。枯了,我什么时候才能站起来。。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号