A 15 and 20
模拟直接上
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
scanf("%d",&t);
while(t--) {
int a1,b1,c1;
scanf("%d%d%d",&a1,&b1,&c1);
int a2,b2,c2;
scanf("%d%d%d",&a2,&b2,&c2);
int sum=b1+c1+b2+c2;
if(sum==a1) {
if(sum==a2)
puts("continue");
else
puts("alice");
} else {
if(sum==a2)
puts("bob");
else
puts("continue");
}
}
return 0;
}
B 显示器
模拟直接上,注意细节
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
scanf("%d",&t);
while(t--) {
int c,r,n;
scanf("%d%d%d",&c,&r,&n);
while(n--) {
int a,b;
scanf("%d%d",&a,&b);
int c1=c/a,c2=r/b;
int sum1=c1*a,sum2=c1*b;
int sum3=c2*a,sum4=c2*b;
if(sum1<=c&&sum2<=r) {
if(sum3<=c&&sum4<=r) {
if(sum1*sum2>=sum3*sum4)
printf("%d %d\n",sum1,sum2);
else
printf("%d %d\n",sum3,sum4);
} else
printf("%d %d\n",sum1,sum2);
} else {
if(sum3<=c&&sum4<=r)
printf("%d %d\n",sum3,sum4);
else
printf("%d %d\n",0,0);
}
}
if(t!=0)
printf("\n");
}
return 0;
}
C Sequence
递推公式为 以三为循环节
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
scanf("%d",&t);
while(t--) {
long long a1,a2,k;
scanf("%lld%lld%lld",&a1,&a2,&k);
long long a3=a2-a1;
if(k<=3) {
if(k==1) {
printf("%lld\n",a1);
}
if(k==2) {
printf("%lld\n",a2);
}
if(k==3) {
printf("%lld\n",a3);
}
} else {
long long z2=k%3;
if(z2==1) {
long long z1=(k-1)/3;
if(z1%2==0)
printf("%lld\n",a1);
else
printf("%lld\n",-a1);
}
if(z2==2) {
long long z1=(k-2)/3;
if(z1%2==0)
printf("%lld\n",a2);
else
printf("%lld\n",-a2);
}
if(z2==0) {
long long z1=(k-3)/3;
if(z1%2==0)
printf("%lld\n",a3);
else
printf("%lld\n",-a3);
}
}
}
return 0;
}
D Carrot
特判n==2的情况,然后判断n的奇偶性即可
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
scanf("%d",&t);
while(t--) {
long long n;
scanf("%lld",&n);
if(n==2)
puts("2");
else {
if(n%2==0)
puts("0");
else
puts("1");
}
}
return 0;
}
E Cuboid
暴力枚举
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
scanf("%d",&t);
while(t--) {
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
long long sum1=(b+c)*(b+c)+a*a;
long long sum2=(a+c)*(a+c)+b*b;
long long sum3=(a+b)*(a+b)+c*c;
printf("%lld\n",min(sum1,min(sum2,sum3)));
}
return 0;
}
F Order
考虑贪心,每天都生产m件直至最后小于m的情况,模拟相加即可求出答案。前两发写挂超时了,可惜可惜
#include<bits/stdc++.h>
using namespace std;
vector<int> p;
int main() {
int t;
scanf("%d",&t);
while(t--) {
p.clear();
int n,m;
scanf("%d%d",&n,&m);
p.resize(n);
for(int i=0;i<n;i++)
scanf("%d",&p[i]);
int start=1,sum=0;
for(int i=0;i<n;){
int temp=m;
while(i<n&&temp>=p[i]) {
temp-=p[i];
i++;
sum+=start;
}
start++;
}
printf("%d\n",sum);
}
return 0;
}
G Ball
比赛没写出,赛后题解发现是结论,人没了。当时最后半小时一直在推,可惜可惜
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
scanf("%d",&t);
while(t--) {
long long n,m;
scanf("%lld%lld",&n,&m);
long long d=__gcd(n,m);
n/=d,m/=d;
if(abs(n-m)%2==1)
puts("-1");
else
printf("%lld\n",n+m-2);
}
return 0;
}
H 奇怪的回文子串
不会待补
I Line
将矩形分成两半那么这一点肯定回过矩形的x上的中点和y上的中点,这一点比赛当时没想到,可惜可惜。这样就知道了P点和另一点我们暂时称为中点。两点确定一条直线,判断直线是否存在并化简即可。
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
scanf("%d",&t);
while(t--) {
long long x1,y1,x2,y2,x3,y3;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
long long x4=(x1+x2),y4=y1+y2;
x3*=2,y3*=2;
long long a=y3-y4;
long long b=x4-x3;
long long c=-(a*x3+b*y3);
c/=2;
if(a==0){
long long k=__gcd(b,c);
b/=k,c/=k;
if(b<0)b/=-1,c/=-1;
cout<<a<<' '<<b<<' '<<c<<endl;
continue;
}
long long k=__gcd(a,__gcd(b,c));
a/=k,b/=k,c/=k;
if(a<0)
a/=-1,b/=-1,c/=-1;
printf("%lld %lld %lld\n",a,b,c);
}
return 0;
}
J 勾股定理
感谢Google和百度搜索引擎,比赛时成功找到了勾股数的构造方法,分成奇数和偶数两种,上代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
scanf("%d",&t);
while(t--) {
long long a;
scanf("%lld",&a);
if(a%2==1) {
long long z=(a-1)/2;
printf("%lld %lld\n",2*z*z+2*z,2*z*z+2*z+1);
} else {
if(a==4)
printf("3 5\n");
else
printf("%lld %lld\n",(a/2)*(a/2)-1,(a/2)*(a/2)+1);
}
}
return 0;
}
K BAD String
不会待补