由于今天太颓了,所以没有解释
t1:
一道快乐题。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int t; long long a; int main() { scanf("%d",&t); while(t--) { scanf("%lld",&a); printf("%lld\n",a+1); } return 0; }
t2:
dp+kmp
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; char b[200010]; int nxt[200010],f[200010]; int p,len,sum; long long ans; int main() { scanf("%s",&b); int lenb=strlen(b); int j=0; for(int i=1;i<lenb;i++) { while(j!=0&&b[i]!=b[j]) j=nxt[j]; if(b[i]==b[j]) nxt[i+1]=++j; else nxt[i+1]=0; } for(int i=2;i<=lenb; i++) { if(i%2==0) f[i]++; f[i]+=f[nxt[i]]; ans+=f[i]; } cout<<ans; return 0; }
t3:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; int n,m,head[1010],cnt,disr[1010],ml,mr,flg,vis[1010]; struct Edge { int v,nxt,l,r; }e[6010]; void add(int u,int v,int l,int r) { e[++cnt].nxt=head[u]; e[cnt].v=v; e[cnt].l=l; e[cnt].r=r; head[u]=cnt; } void spfa(int x) { queue<int>q; memset(disr,0,sizeof(disr)); disr[1]=0x3f3f3f3f; vis[1]=1; q.push(1); while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=0; for(int i=head[u];i;i=e[i].nxt) { int v=e[i].v; if(e[i].l>x||e[i].r<x) continue; int mindisr=min(disr[u],e[i].r); if(disr[v]<mindisr) { disr[v]=mindisr; if(!vis[v]) { q.push(v); vis[v]=1; } } } } if((disr[n]-x>mr-ml)||(ml==0)) { mr=disr[n]; ml=x; flg=1; } if(x<=ml) { if(disr[n]-x==mr-ml) { mr=disr[n]; ml=x; flg=1; } } return; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int a,b,ll,rr; scanf("%d%d%d%d",&a,&b,&ll,&rr); add(a,b,ll,rr); add(b,a,ll,rr); } for(int i=1;i<=cnt;i+=2) { spfa(e[i].l); } if(!flg) cout<<"0"<<endl; else { printf("%d\n",mr-ml+1); while(ml<=mr) { printf("%d ",ml); ml++; } } return 0; }