上午:
校门外的树
思路:就几个循环就出来了
#include<stdio.h>
int main()
{
int tree[10000];
int l,m;
scanf("%d %d",&l,&m);
for(int i=0;i<=l;i++)
{
tree[i]=1;
}
for(int i=0;i<m;i++)
{
int u,v;
scanf("%d %d",&u,&v);
for(int i=u;i<=v;i++)
{
tree[i]=0;
}
}
int num=0;
for(int i=0;i<=l;i++)
{
if(tree[i]==1)
num++;
}
printf("%d\n",num);
return 0;
}
第一次,第二次成交
(排序后,只要你找到一个价钱后面的就都可以拿下了)
//其实就是排序然后再每个都列举一遍顺便在列举时比较就可以了
#include<stdio.h>
int main()
{
int n,m;
int p[10000];
scanf("%d %d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d",&p[i]);
}
//从大到小排序(这样的话,这个数后面的所有都是它可以得到的价钱
for(int i=0;i<m-1;i++)
{
for(int j=i+1;j<m;j++)
{
if(p[i]>p[j])
{
int temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
int max=0;
int num=0;
for(int i=0;i<m;i++)
{
if(p[i]*(m-i)>max&&m-i<=n)
{
max=p[i]*(m-i);
num=i;
}
}
printf("%d %d\n",p[num],max);
return 0;
}
下午:
测试;
补题:
Alice Wins(easy version)
/*
题解:
【1】它可以对每个组进行n次操作
【2】为了保证A能得到最多的分数
【3】前n让A赢,后n让B输
*/
#include<stdio.h>
int a[200020],b[200020];
int n;
void change(int *a,int *b)
{
for(int i=1; i<=n; i++)
{
if(b[i]==1)
a[i]=3;
else
a[i]=b[i]-1;
}
for(int i=n+1;i<=2*n;i++)
{
if(a[i]==3)
b[i]=1;
else
b[i]=a[i]+1;
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1; i<=2*n; i++)
{
scanf("%d",&a[i]);
}
for(int i=1; i<=2*n; i++)
{
scanf("%d",&b[i]);
}
change(a,b);
printf("%d\n",2*n);
for(int i=1; i<=2*n; i++)
{
printf("%d ",a[i]);
}
printf("\n");
for(int i=1; i<=2*n; i++)
{
printf("%d ",b[i]);
}
printf("\n");
}
return 0;
}
晚上:
Erinnerung
这是上午没做完的题
//最重要就是要开long long 才能过
//而且注意 max 也的是 long long
#include<stdio.h>
int main()
{
long long T;
scanf("%lld",&T);
while(T--)
{
long long x,y,k;
scanf("%lld %lld %lld",&x,&y,&k);
long long max=x;
if(y>max)
max=y;
if(x==0&&y==0)
{
printf("0\n");
continue;
}
else if(x==0||y==0)
{
if(k%max==0)
printf("1\n");
else
printf("0\n");
continue;
}
else
{
printf("%lld\n",k/max);
}
}
return 0;
}