你最愿意做的哪件事,才是你的天赋所在

0%

DayMath20200518

题目链接

LightOJ-1010
LightOJ-1008
LightOJ-1020

LightOJ-1008

思路

很多方法吧,我是观察到每轮的结束时1,4,9,25,36~~~,就是平方数,然后在判断它的偏移就好了。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
int t;
scanf("%d",&t);
for(int cas = 1;cas<=t;cas++){
ll x;
scanf("%lld",&x);
int pos = (int)sqrt(x);
if(1ll*pos*pos!=x)pos++;
int num = 2*pos-1;
ll re = 1ll*pos*pos-x;
printf("Case %d: ",cas);
if(pos&1){
if(re>num/2){
printf("%d %d\n",pos,pos-(re-num/2));
}else{
printf("%d %d\n",1+re,pos);
}
}else{
if(re>num/2){
printf("%d %d\n",pos-(re-num/2),pos);
}else{
printf("%d %d\n",pos,1+re);
}
}
}
}

LightOJ-1010

思路

这个题,当仅为1行或者1列的时候答案很显然,但是当为n=2或者m=2的时候就要如图一这种方式,n>=3的时候就交叉着涂

IMG_20200518_020814.jpg

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll getans(int n,int m){
int mi = min(n,m);
int mx = max(n,m);
int bmx = mx/2,bmi=mi/2;
ll res = 0;
if(mi&1){
if(mx&1){
res+=(mx/2+1)*(mi/2+1);
res+=(mx/2)*(mi/2);
}else{
res+=(mx/2)*mi;
}
}else{
res+=(mi/2)*mx;
}
return res;
}
int main(){
int t;
scanf("%d",&t);
for(int cas=1;cas<=t;cas++){
int n,m;
scanf("%d %d",&n,&m);
ll ans = getans(n,m);
if(n<m)swap(n,m);
if(m==1){
ans=n;
}else if(m==2){
ans= (n/4)*4 + min(n%4,2)*2;
}
printf("Case %d: %lld\n",cas,ans);
}
}

LightOJ-1020

思路

很简单的博弈,手推几个就能推出结论。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5+10;
char s[100];
int main(){
int t;
scanf("%d",&t);
for(int cas=1;cas<=t;cas++){
ll n;
scanf("%lld %s",&n,s);
printf("Case %d: ",cas);
if(s[0]=='A'){
if(n%3==1)printf("Bob\n");
else printf("Alice\n");
}else{
if(n%3!=0)printf("Bob\n");
else printf("Alice\n");
}
}
}
-------------你最愿意做的哪件事才是你的天赋所在-------------