目录
Tower
Frozen Scoreboard
Identical Parity编辑
Best Carry Player
Stack Sort
Invoker
Forest Program
Angle Beats
Catch You Catch Me
Tower
思路:
提前进行/2的预处理操作,操作之后 ,在记录下要达到一样的步骤,由于可以可删除m座塔,所以此时,将步骤最多的删除,就是答案了
#include
#include
#include
#include
#include
#include
#include
#include
#include
Frozen Scoreboard
思路:
纯大模拟,写出来了是好题,写不出来,这什么lj题(气急败坏)
来自大佬的说法就是硬写,然后加上dfs
这是佬码
#include
using namespace std;
typedef long long ll;
ll haoye=0;
struct vis{
ll t,s;
};
vis a[1005];
vectord[1005];
vectorq[1005];
vectorh[1005];
ll st[15];
ll n,m;
ll check(ll x){
ll z=0,w=0;
ll ss=0;
for(int i=0;ia[x].s)return 0;
if(z==a[x].s){
if(ss!=a[x].t)return 0;
else return 1;
}
if(z+w>=a[x].s){
return 2;
}
return 0;
}
void dfs(ll x,ll cnt,ll idx){
if(haoye==1)return ;
if(cnt==0){
vectormd;
ll ssum=0;
ll hh=0;
for(int i=0;i=ssum&&a[x].t<=ssum+hh) {
haoye=1;
cout<<"Yes\n";
ll tmp=a[x].t-ssum;
for(int i=0;i=20&&hh>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].t;
string op;
for(int j=1;j<=m;j++){
cin>>op;
if(op=="."){
d[i].push_back(op);
q[i].push_back(0);
h[i].push_back(0);
}
else if(op=="+"){
d[i].push_back(op);
string hh;
cin>>hh;
ll mm=0;
for(int k=0;k>caiq>>caih;
q[i].push_back(caiq);
h[i].push_back(caih);
}
else {
d[i].push_back(op);
ll cai;
cin>>cai;
q[i].push_back(cai);
h[i].push_back(0);
}
}
}
// for(int i=1;i<=n;i++){
// for(int j=0;j>t;
// scanf("%lld",&t);
while(t--)
vision();
return 0;
}
Identical Parity
思路:
#include
#include
#include
#include
#include
#include
#include
#include
#include
Best Carry Player
思路:
签到题了属于;就进位+1就行
#include
#include
#include
#include
#include
#include
#include
#include
#include
Stack Sort
思路:
记录,比当前大的有没有入栈,没入栈就ans++;
#include
#include
#include
#include
#include
#include
#include
#include
#include
Invoker
思路:
你和我说这是简单dp?????????
由于按键可以保留,那么尽量让本次的按键对下次技能的按键保留的最多。
但是由于技能之间的按键顺序可以任意,所以我们dp按键组合。
因为一个技能有三个键,所以可以产生六种排序方式(完全相同的也算上)。
dp[i][j]表示第i个技能使用第j种排序方式的按键数,这样我们可以得出方程dp[i][j]=min(dp[i][j],dp[i-1][k]+(第i-1个技能使用第j种排序方式和第i个技能使用第k种排序方式的差值))。
#include
#include
#include
#include
#include
#include
#include
#include
#include
、
思路:
先反转一下,对于每一个位置,我们要求出这个位置开始的最短循环节。这个 K M P KMP KMP一下即可。
例如 a b a a b a a b abaabaab abaabaab, f a i l [ 8 ] fail[8] fail[8](最后一位后面)指向 6 6 6( a b a a b abaab abaab后面),那么说明这两段相同。这个又说明 a b , a b a a b ab,abaab ab,abaab也匹配,所以 f a i l fail fail跳跃的数量就是最短的可行循环节。
#include
#include
#include
#include
#include
#include
#include
#include
#include
Forest Program
思路:
一个博弈论,也就是看奇偶路径情况
#include
#include
#include
#include
#include
#include
#include
#include
#include
Angle Beats
思路:
运用离线处理的方法,要不然会t,直角三角形去考虑斜率的问题,斜率相乘-1都是垂直
#include
#include
#include
#include
#include
#include
#include
#include
#include
Catch You Catch Me
思路:
思维题,只要在1节点下面的节点等着就行了
#include
#include
#include
#include
#include
#include
#include
#include
#include
总结就是:我还是太菜了啊