第一题
模拟
#include<cstdio> #include<cstring> #include<cctype> #include<cmath> #include<algorithm> #define ll long long using namespace std; int read() { char c;int s=0,t=1; while(!isdigit(c=getchar()))if(c==‘-‘)t=-1; do{s=s*10+c-‘0‘;}while(isdigit(c=getchar())); return s*t; } /*------------------------------------------------------------*/ const int inf=0x3f3f3f3f,maxn=101000,MOD=1000000007; int n; char s[maxn],ans[maxn],nows[maxn]; int main() { int T; scanf("%d",&T); while(T--){ scanf("%s",s+1); int n=strlen(s+1); int nowstep=0,len=0,tot=0; for(int i=1;i<=n;i++)if(isdigit(s[i])){ if(nowstep==1){nows[++len]=s[i];} else if(nowstep==2){ for(int j=1;j<=s[i]-‘0‘;j++){ for(int k=1;k<=len;k++){ ans[++tot]=nows[k]; } } len=0;nowstep=0; } else if(nowstep==0)ans[++tot]=s[i]; } else{ if(nowstep==0&&s[i]==‘(‘)nowstep=1;else if(nowstep==1&&s[i]==‘)‘)nowstep=2; } long long ansnum=0; for(int i=1;i<=tot;i++)ansnum=(ansnum*10+ans[i]-‘0‘)%MOD; printf("%lld\n",ansnum); } return 0; }
第二题
数学相关,弃坑。
第三题
题意:一个2*n的网格,再保证步数最少的情况下,求从任意格出发遍历完所有格的方案数,格子八连通。n<=10000,T<=100。
算法:数学+递推DP
题解:
第四题
计算几何相关,弃坑。
第五题
题意:定义V-number为从左到看单位数字未出现先递增后递减现象的数字,求0~N中满足条件的数字个数。T<=200,lenth(n)<=100
算法:数位DP
题解:
第六题
题解:一个无向图,k个给定点为高点,其余为低点,要求拼成若干个高-低-高的三元组(“-”表示有边直连),三元组之间点不重复,求至多拼成多少个三元组。
n<=30,k<=15,T<=20
算法:状压DP
题解:看数据范围猜算法!
战果:rank 100,naive successful!开心>w<!
时间: 2024-10-08 21:38:46