首页 > 其他分享 >USACO乱做

USACO乱做

时间:2023-05-15 23:14:20浏览次数:40  
标签:pre int USACO print define wz las

USACO乱做

P9188 [USACO23OPEN] Pareidolia S

做了好久,感觉自己好sb
这种题有一个比较显然的想法,就是\(f_i\),代表的是以\(i\)为结尾的所有字串的bessie个数。
首先有\(f_i=f_{i-1}\),因为以\(i\)结尾的个数肯定比\(i-1\)多,这是很显然的。
接下来考虑多出一个\(c_i\)所多出的贡献,接下来有两种情况,需要分开讨论。
1.\(c_i \neq e,f_i = f_{i-1}\)
2.\(c_i = e,f_i = f_{k-1}+k\)
这里的\(k\)是最后一个\(k\)到\(i\)能够有子序列bessie的位置,这个位置一定是\(d\)。
第一种情况很明显没有多出的贡献。
第二种是\(k\)到\(i\)会多出一个bessie,对于以\(1\)到\(k\)开头的字串都会多一个,而多出来的基础是从\(f_{k-1}\)的基础上转移的,很明显是对的。

code

#include <bits/stdc++.h>
#define int long long
#define rg register
#define pc putchar
#define gc getchar
#define pf printf
#define space pc(' ')
#define enter pc('\n')
#define me(x,y) memset(x,y,sizeof(x))
#define pb push_back
#define FOR(i,k,t,p) for(rg int i(k) ; i <= t ; i += p)
#define ROF(i,k,t,p) for(rg int i(k) ; i >= t ; i -= p)
using namespace std ;
bool s_gnd ;
inline void read(){}
template<typename T,typename ...T_>
inline void read(T &x,T_&...p)
{
    x = 0 ;rg int f(0) ; rg char c(gc()) ;
    while(!isdigit(c)) f |= (c=='-'),c = gc() ;
    while(isdigit(c)) x = (x<<1)+(x<<3)+(c^48),c = gc() ;
    x = (f?-x:x) ;
    read(p...);
}
int stk[30],tp ;
inline void print(){}
template<typename T,typename ...T_>
inline void print(T x,T_...p)
{
    if(x < 0) pc('-'),x = -x ;
    do stk[++tp] = x%10,x /= 10 ; while(x) ;
    while(tp) pc(stk[tp--]^48) ; //space ;
    print(p...) ;
}
bool S_GND ;
const int N = 6e5+5 ;
int n,st,ans,top(1) ;
char s[N],t[100] = " bessie" ;
int f[N],g[N],pre[510] ;
int las[N][10] ;
signed main()
{
//cerr<<(double)(&s_gnd-&S_GND)/1024.0/1024.0 ;
	// freopen("3.in","r",stdin) ;
	// freopen("3.out","w",stdout) ;
    cin>>s+1,n = strlen(s+1) ;
    FOR(i,1,n,1)
    {
        f[i] = f[i-1] ;
        FOR(j,0,3,1) las[i][j] = pre[j] ;
        if(s[i] == 'b') pre[0] = i ;
        if(s[i] == 'e') pre[1] = i ;
        if(s[i] == 's') pre[2] = i ;
        if(s[i] == 'i') pre[3] = i ;
        if(s[i] == 'e')
        {
        int rp = s[i]=='e'?i:las[i][1] ;
        int wz = las[las[las[las[las[rp][3]][2]][2]][1]][0] ;
        if(!wz) continue ; f[i] = f[wz-1]+wz ; //print(wz),space,print(f[i]),enter ;
        }
    }
    FOR(i,1,n,1) ans += f[i] ;
    print(ans) ;
    return 0 ;
}

标签:pre,int,USACO,print,define,wz,las
From: https://www.cnblogs.com/snow-panther/p/17403411.html

相关文章

  • [USACO11DEC]Grass Planting G
    树链剖分题目注意:要把边权转为点权计算两条链时,这两条链的公共点被额外算了一次,需要减去它#include<cstdlib>#include<cstring>#include<cstdio>#include<cctype>#include<algorithm>typedeflonglongLL;typedefunsignedlonglongULL;namespaceFastIo{typ......
  • 【题解】Luogu[P6003] USACO20JAN Loan Repayment S
    模拟赛第一题(9pts考虑暴力。枚举\(x\),对于每个\(x\),模拟\(k\)天,判断其是否合法,找出最大的\(x\)。时间复杂度:\(O(n^2)\)36pts考虑优化先前暴力算法。我们不难发现当\(x\)合法时,必然有合法\(x_1\),当且仅当\(x_1<x\)。故\(x\)具有单调性,考虑二分答案。对于\(x......
  • 【题解】Luogu[P1879] [USACO06NOV]Corn Fields G
    Link→状压dp典题,看数据范围就能多半猜到是状压。\(M\)行\(N\)列很不舒服,本篇题解规定为\(N\)行\(M\)列。因为说没有哪两块草地相连,我们不妨一行一行考虑,一行中每格只可能是\(0\)或\(1\),所以一行的总不同状态数是\(2^M\)。我们用二进制表示每一行的状态,对于每一行,暴......
  • 洛谷 P4544 [USACO10NOV]Buying Feed G - 题解
    https://www.luogu.com.cn/problem/P4544感觉是很没意思的DP+DS优化,以前做过几道更难的题:https://codeforces.com/contest/1788/problem/Ehttps://atcoder.jp/contests/abc288/tasks/abc288_f这种题只要是让我写总是能把代码整的伤痕累累(逃第一眼:我艹不就是一个sbDP吗......
  • [USACO1.3]Ski Course Design
    #[USACO1.3]SkiCourseDesign题目描述农民约翰的农场里有\(n\)座山峰,每座山都有一个在\(0\)到\(100\)之间的整数的海拔高度。在冬天,因为山上有丰富的积雪,约翰经常开办滑雪训练营。不幸的是,约翰刚刚得知税法在滑雪训练营方面有新变化,明年开始实施。在仔细阅读法律后,他......
  • P1676 [USACO05FEB] Aggressive cows G 题解
    题目传送门解题思路最大值最小化问题,考虑二分答案。首先要排序,保证序列单调不降,然后求出两个隔间之间的距离。sort(a+1,a+1+n);for(rii=1;i<=n;i++) dis[i]=a[i+1]-a[i];二分出一个\(mid\),判断它是否合法:每次累加距离,如果距离和比\(mid\)大,说明当前可以分配牛,记录数量......
  • 「USACO2016JAN」Subsequences Summing to Sevens
    [USACO16JAN]SubsequencesSummingtoSevensS题目描述FarmerJohn's\(N\)cowsarestandinginarow,astheyhaveatendencytodofromtimetotime.EachcowislabeledwithadistinctintegerIDnumbersoFJcantellthemapart.FJwouldliketota......
  • Luogu P2973 [USACO10HOL]Driving Out the Piggies G
    发现答案其实与这个点炸弹经过的次数有关,因为只要知道了这个点炸弹经过次数\(w\),这个点答案就能算出:\(w\times\frac{p}{q}\)就想到设\(f_u\)为\(u\)点炸弹经过次数\(u\)点经过次数便可以由有连边的\(v\)点推来,要满足\(v\)点此时炸弹没爆炸且\(deg_v\)条边中选了\(......
  • 【做题笔记】洛谷 P7987 [USACO21DEC] Paired Up G
    在我的个人博客获得更好的阅读体验Problem洛谷P7987[USACO21DEC]PairedUpG题目大意:有\(n\)个点,其中第\(i\)个点位置为\(x_i\),权值为\(y_i\)。若两个点\(i,j\)满足\(|x_i-x_j|\lek\),则这两个点之间有一条边。求一个匹配,在满足其为极大匹配的情况下匹配点的......
  • P1345 [USACO5.4]奶牛的电信Telecowmunication 题解
    一、题目描述:n个点,m条边,给定起点s和终点t,求最少删去几个点后,s和t不连通。注意,s和t不能删掉。1<=n<=100,1<=m<=600; 二、解题思路:刚刚学了最大费用流,知道最大流等于最小割。但此题割的不是边,是点。我们需要将将割点转化为割边。把一个点切成两半......