首页 > 其他分享 >Atcoder 题集

Atcoder 题集

时间:2022-09-19 15:35:40浏览次数:87  
标签:Atcoder nj return mat int 题集 dfs usedA

Atcoder题集

E - Lucky 7 Battle

博弈论,对抗性搜索,记忆化搜索

#include<bits/stdc++.h>
using namespace std;
string t,x;
int n;
int f[200010][7];
int dfs(int i,int r)
{
if(f[i][r]!=-1) return f[i][r];
if(i==n+1) return r==0;
if(x[i]=='T') return f[i][r]=dfs(i+1,r*10%7)|dfs(i+1,(r*10+t[i]-'0')%7);
else return f[i][r]=dfs(i+1,r*10%7)&dfs(i+1,(r*10+t[i]-'0')%7);
}
int main()
{
memset(f,-1,sizeof(f));
cin>>n;
cin>>t;
cin>>x;
t=" "+t;
x=" "+x;
int k=dfs(1,0);
if(!k) cout<<"Aoki";
else cout<<"Takahashi";
}

D - Hanjo (atcoder.jp)

暴搜,比较难写

#include <cstdio>
#define maxn 20
using namespace std;

bool mat[maxn][maxn];
int h, w, a, b, ans;

inline bool valid(int x, int y)
{
return !mat[x][y] && x >= 0 && x < h && y >= 0 && y < w;
}

void dfs(int i, int j, int usedA, int usedB)
{
if((usedA << 1) + usedB == h * w)
{
ans ++;
return;
}
if(i == h) return;
int ni, nj;
if(j == w - 1) ni = i + 1, nj = 0;
else ni = i, nj = j + 1;
if(mat[i][j])
{
dfs(ni, nj, usedA, usedB);
return;
}
mat[i][j] = true;
// Rectangle (A)
if(usedA < a)
{
if(valid(i, j + 1))
{
mat[i][j + 1] = true;
dfs(ni, nj, usedA + 1, usedB);
mat[i][j + 1] = false;
}
if(valid(i + 1, j))
{
mat[i + 1][j] = true;
dfs(ni, nj, usedA + 1, usedB);
mat[i + 1][j] = false;
}
}
// Square (B)
if(usedB < b) dfs(ni, nj, usedA, usedB + 1);
mat[i][j] = false;
}

int main()
{
scanf("%d%d%d%d", &h, &w, &a, &b);
dfs(0, 0, 0, 0);
printf("%d\n", ans);
return 0;
}
 

标签:Atcoder,nj,return,mat,int,题集,dfs,usedA
From: https://www.cnblogs.com/Jayint/p/16707797.html

相关文章

  • AtCoder Regular Contest 148 C Lights Out on Tree
    挺好的一道题,简单写一下题解吧。首先有挺多很naive的结论:每个节点按两遍等于没按。熄灭所有的灯只有一种方案。其实将灯熄灭的方案无非就是从上往下dfs,如果当前灯......
  • AtCoder Beginner Contest 268
    E-ChineseRestaurant(Three-StarVersion)假设旋转\(x\)次时,\(n\)个人失望值的总和为\(c_x\),那么只要能求出\(c_x,0\lex<n\)就可以包含所有情况,然后再取......
  • AtCoder Beginner Contest 269 (A-F)题解
    A-AnywayTakahashi这里我还是关了ll的C开了忘了关害的F多了一发罚时#include<bits/stdc++.h>usingnamespacestd;constintN=3e5+10;constintM=9982443......
  • AtCoder Beginner Contest 269
    咕咕咕咕咕。F-NumberedChecker首先矩形容斥,把一个询问拆分成4个询问。现在只需要解决:左上角为\((1,1)\),右下角为\((x,y)\)的矩形区域和这一问题。把列数为奇......
  • AtCoder Beginner Contest 267 题解
    只会\(A\simG\)主观难度:\(A<B<C<E<D<F<G<Ex\)A-Saturday分别对周一到周五判断即可。#include<bits/stdc++.h>usingnamespacestd;inlineintread(){int......
  • AtCoder Beginner Contest 262(D-E)
    D-IHateNon-integerNumber题意:一个长度为n的数组,选择其中的x项,问其中有多少种选择,这x项的和可以被选择的数目整除,比如,选择3个数,和为6,那么6/3=2,就可以被整除。题解:......
  • AtCoder Regular Contest 147
    ProblemA题目大意:由N个正整数组成的序列,我们可以从中取出任意长短序列进行如下操作:序列中(最大值maxn%最小值minn=A),如果A为0则删除maxn,否则用A替换,询问要使得整个序......
  • AtCoder做题记录
    AtCoder大乱炖AtCoder乱做AtCoder随便草ARC147ARC147C发现这个式子当所有\(x_i\)趋近于某一个值时答案比较优,于是可以发现这是一个近似单谷函数,用二分+随机化/特......
  • AtCoder Beginner Contest 265
    E-Warp注意到\(N\)相比\(M\)要小得多。考虑DP,令\(dp_{i,j,k}\)表示一共使用了\(i+j+k\)次操作,且每种操作的使用次数分别为\(i,j,k\)的方案数,然后......
  • AtCoder Beginner Contest 267
    A-Saturday题意:给定今天的日期,问到周六还有几天。分析:暴力判断即可。代码:intmain(){ cin>>s; if(s=="Monday")ans=5; if(s=="Tuesday")ans=4; if(s=="We......