A
简单构造即可。
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
int t;
cin>>t;
while(t--)
{
ll u,v;
cin>>u>>v;
cout<<u*u<<" "<<-v*v<<endl;
}
return 0;
}
B
因为题目要求的是要让相邻的格子颜色不同,所以我们可以看作每次取出三块格子,中间那块涂成蓝色,这样可以让最后得到的蓝色格子最少。但现在还有一个问题,就是如果每次取三个,到最后可能会有剩余,这样的话蓝色格子数就需要加上1个,所以我们可以将总格子数加上2,这样就算有剩余我们也可以加上剩余的蓝色格子数。
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int x,y;
cin>>x>>y;
cout<<(x*y+2)/3<<endl;
}
return 0;
}
C
这题直接暴力模拟就可以了。
#include<iostream>
#include<algorithm>
using namespace std;
int a[110],b[110];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
for(int j=0;j<n;j++)cin>>b[j];
sort(a,a+n);
sort(b,b+n);
int f=1;
for(int i=0,j=0;i<n;i++,j++)
{
if(a[i]+1<b[j])
{
f=0;
break;
}
if(a[i]>b[j])
{
f=0;
break;
}
}
if(f)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}