- 张家宁 的博客
DAY7
- @ 2024-7-21 20:02:17
小田不想打怪兽
光线名字换一个吧!听着肉麻
思路
就是一颗二叉树,用ans1来记录当前怪兽数量,ans2记录当前怪兽血量 递推公式:
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("aoteman.in","r",stdin);
freopen("aoteman.out","w",stdout);
int h;
long long ans=1,tp=1;
cin>>h;
while(h/=2){
ans+=tp*2;
tp*=2;
}
cout<<ans;
return 0;
}
小田的异或炸弹
思路
- 用差分,分成几行,来进行运算
- 当f[i][j]%2==1时,就是1!
代码
#include<bits/stdc++.h>
using namespace std;
int a[3010][3010],f[3010][3010],cnt;
int main(){
freopen("boom.in","r",stdin);
freopen("boom.out","w",stdout);
int n,m;
cin>>n>>m;
while(m--){
int x,y,b;
cin>>x>>y>>b;
for(int i=1;i<=n;i++){
int k=b-abs(x-i);
if(k>=0){
int l=max(1,y-k);
int r=min(n,y+k);
f[i][l]++;
f[i][r+1]--;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f[i][j]=f[i][j-1]+f[i][j];
if(f[i][j]%2){
cnt++;
}
}
}
cout<<cnt;
return 0;
}
小田的钻石
他哪里有钻石啊,在做白日梦呢
思路
本题要用前缀和与双指针:
- 将输入的值排序。
- 计算前缀和后缀(不是正经的)。
- 找出最佳答案
代码
#include<bits/stdc++.h>
using namespace std;
int a[100010];
int l[100010],r[100010];
int main(){
freopen("demon.in","r",stdin);
freopen("demon.out","w",stdout);
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
//for(int i=1;i<=n;i++){
// cout<<a[i]<<" ";
//}
for(int i=1,j=1;j<=n;j++){
while(i<=j&&a[j]-a[i]>k){
i++;
}
l[j]=j-i+1;
}
for(int i=1;i<=n;i++){
l[i]=max(l[i-1],l[i]);
}
for(int i=n,j=n;j>0;j--){
while(i>=j&&a[i]-a[j]>k&&i>0){
i--;
}
r[j]=i-j+1;
}
for(int i=n;i>0;i--){
r[i]=max(r[i+1],r[i]);
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(l[i]+r[i+1],ans);
//cout<<l[i]<<" "<<r[i]<<" "<<i<<endl;
}
cout<<ans;
return 0;
}
小田抓牛
思路
纯模拟
代码
#include <bits/stdc++.h>
using namespace std;
int a[15][15];
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
int dfs(int t_i,int t_j,int c_i,int c_j){
int t=0,c=0,cnt=0;
while(t_i!=c_i||t_j!=c_j){
int ti=t_i+dx[t],tj=t_j+dy[t];
int ci=c_i+dx[c],cj=c_j+dy[c];
bool nt=0,nc=0;
if(ti<1||tj<1||ti>10||tj>10||a[ti][tj]==1){
t++;
if(t==4) t=0;
nt=1;
}
if(ci<1||cj<1||ci>10||cj>10||a[ci][cj]==1){
c++;
if(c==4) c=0;
nc=1;
}
if(nt==0||nc==0){
if(nt==0){
t_i=ti,t_j=tj;
}if(nc==0){
c_i=ci,c_j=cj;
}
}
cnt++;
if(cnt==1e7){
cout <<"0";
return 0;
}
}
cout <<cnt;
return 0;
}
int main(){
freopen("cow.in","r",stdin);
freopen("cow.out","w",stdout);
int t_i,t_j,c_i,c_j;
for(int i=1;i<=10;i++){
for(int j=1;j<=10;j++){
char c;
cin >>c;
if(c=='*') a[i][j]=1;
else a[i][j]=0;
if(c=='T') t_i=i,t_j=j;
if(c=='C') c_i=i,c_j=j;
}
}
dfs(t_i,t_j,c_i,c_j);
return 0;
}