RCC 2014 Warmup (Div. 2)

一场很很多HACK的比赛,PREtest太弱了,真的很多坑!平时练习的时候很少注意这些东西了!

A:开始一直在模拟,后来发现自己的思路逻辑很乱,果然做比赛不给力! 直接在代码中解释了

#include<iostream>
#include<math.h>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
    int c,d,n,m,k;
    int ans=999999999;   //初始一个值
    cin>>c>>d>>n>>m>>k;
    if (k>=n*m) cout<<0<<endl;   //判断条件
    else {
            int l=m*n-k;          //出去有了的
            for (int i=0;i<=l;i++)  //M枚举第二场的比赛数
           {
            int jj=(l-i+n-1)/n;  //核心,计算第一场的比赛
           int yy=i*d+jj*c;       //+N-1是因为上界的原因
           ans=min(yy,ans);
        }
        cout<<ans<<endl;
    }
    return 0;

} 

 B:一直在用自己呆板的思路做,后来居然超时了,冏!

超时代码:#include<iostream>

#include<math.h>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
struct node
{
    int x,y,pos;
}a[100001];
int b[100005];

int cmp(node a,node b)
{
    if (a.y==b.y) return a.pos<b.pos;
    return a.y<b.y;
}

int main()
{
    int n;
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
       scanf("%d%d",&a[i].x,&a[i].y);
        a[i].pos=i;
    }
    sort(a+1,a+n+1,cmp);
    //for (int i=1;i<=n;i++)
   
//    cout<<a[i].x<<" "<<a[i].y<<endl;
 
//   a[0].x=a[1].x;
  
//  a[0].y=a[1].y;
    for (int i=1;i<=n;i++)
    {
        if (a[i].y!=a[i-1].y)
        {
           if (a[i].x!=0)
           {
              printf("NO\n");
               return 0;
               }
               else {memset(b,0,sizeof(b));b[0]=1;}
        }
        else
        {
                if (b[a[i].x-1]==0&&a[i].x>0) { printf("NO\n");;return 0;}
                else b[a[i].x]=1;
            }
        }
  printf("YES\n");
   return 0;

}

memset了10^5能不超吗?

发现一份神奇的处理代码,果然我弱了!

#include <iostream>
#include <map>
using namespace std;
int n,i,x,k;
bool flag=true;
int a[100005];
int main()
{
    cin>>n;
    for(i=1;i<=100005;i++)
        a[i]=-1;
    for(i=1;i<=n;i++)
    {
        cin>>x>>k;
        if(x>a[k])
            {
            if(x>a[k]+1)
            {
                flag=false;
                break;
            }
            else
                a[k]++;
        }
    }
    if(flag)
        cout<<"YES";
    else
        cout<<"NO";
    return 0;

}

什么都不说了,我还做了那么多的操作,By PocolaOctavian,大神的

 

C:题目比较简单,构造也比较容易,1->2,1->3,1->k+1,.....n->n+k+1,形成一个圈,再判断一下

 数组开小了明明有1000^2的,然后数据量大要用printf("\n");

据说很多人都跪在这里了#include<iostream>

#include<math.h>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
int n,k;
int a[2000000],b[2000000];
int main()
{
  scanf("%d%d",&n,&k);
   if ((n-1)/2<k)
   {
      printf("-1\n");
       return 0;
   }

   int t=0;
   for (int i=1;i<=n;i++)
   {
       for (int j=1;j<=k;j++)
       {
           a[++t]=i;b[t]=i+j;
           if (i+j>n) b[t]=(i+j-n);
       }
   }
   printf("%d\n",t);
   for (int i=1;i<=t;i++)
   printf("%d %d\n",a[i],b[i]);
    return 0;

} 

posted on 2014-04-18 16:19  forgot93  阅读(198)  评论(0编辑  收藏  举报

导航