一场很很多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;
#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 ");
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 ");;return 0;}
else b[a[i].x]=1;
}
}
printf("YES ");
return 0;
#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 ");
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 ");;return 0;}
else b[a[i].x]=1;
}
}
printf("YES ");
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;
#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(" ");
据说很多人都跪在这里了#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 ");
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 ",t);
for (int i=1;i<=t;i++)
printf("%d %d ",a[i],b[i]);
return 0;
#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 ");
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 ",t);
for (int i=1;i<=t;i++)
printf("%d %d ",a[i],b[i]);
return 0;
}