最后把记忆化搜索乱搞的点给写串了,又炸裂了
但是因为馒神操作了一番 避免了掉rating
T1 T2 T3 sb题,随便搞一搞50分钟过

1 // T1:
2 #include<iostream>
3 #include<cstdio>
4 #include<cstring>
5 #include<cstdlib>
6 #include<cmath>
7 #include<algorithm>
8 #include<queue>
9 #include<vector>
10 #include<map>
11 #define inf 2139062143
12 #define ll long long
13 #define MAXN
14 #define MOD
15 using namespace std;
16 inline int read()
17 {
18 int x=0,f=1;char ch=getchar();
19 while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
20 while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
21 return x*f;
22 }
23 int n,m;
24 double a,b,t;
25 int main()
26 {
27 n=read(),m=read(),t=1000.0;
28 for(int i=1;i<=n;i++) {scanf("%lf%lf",&a,&b);t=min(t,a/b);}
29 printf("%.8lf",t*m);
30 }
31 // T2:
32 #include<iostream>
33 #include<cstdio>
34 #include<cstring>
35 #include<cstdlib>
36 #include<cmath>
37 #include<algorithm>
38 #include<queue>
39 #include<vector>
40 #include<map>
41 #define inf 2139062143
42 #define ll long long
43 #define MAXN
44 #define MOD
45 using namespace std;
46 inline int read()
47 {
48 int x=0,f=1;char ch=getchar();
49 while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
50 while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
51 return x*f;
52 }
53 int k;
54 int check(int x)
55 {
56 int res=0;
57 while(x) res+=x%10,x/=10;
58 return res==10;
59 }
60 int main()
61 {
62 k=read();
63 int i=19;
64 while(k)
65 {
66 if(check(i)) k--;
67 i++;
68 }
69 printf("%d",i-1);
70 }
71 // T3:
72 #include<iostream>
73 #include<cstdio>
74 #include<cstring>
75 #include<cstdlib>
76 #include<cmath>
77 #include<algorithm>
78 #include<queue>
79 #include<vector>
80 #include<map>
81 #define inf 2139062143
82 #define ll long long
83 #define MAXN
84 #define MOD
85 using namespace std;
86 inline int read()
87 {
88 int x=0,f=1;char ch=getchar();
89 while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
90 while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
91 return x*f;
92 }
93 int n,m,k,ans,tmp;
94 char mp[2010][2010];
95 int main()
96 {
97 n=read(),m=read(),k=read();
98 for(int i=0;i<n;i++) scanf("%s",mp[i]);
99 for(int i=0;i<n;i++)
100 {
101 int j=0;
102 while(j<m)
103 {
104 tmp=j;
105 while(mp[i][j]=='.'&&j<m) j++;
106 ans+=max(0,j-tmp-k+1);
107 while(mp[i][j]!='.'&&j<m) j++;
108 }
109 }
110 for(int j=0;j<m;j++)
111 {
112 int i=0;
113 while(i<n)
114 {
115 tmp=i;
116 while(mp[i][j]=='.'&&i<n) i++;
117 ans+=max(0,i-tmp-k+1);
118 while(mp[i][j]!='.'&&i<n) i++;
119 }
120 }
121 if(k==1) ans/=2;
122 printf("%d",ans);
123 }
T4:
一个有向图 点上有字母
在图上找一条路径 使路径上经过的点上出现次数最多字母的出现次数最大
思路:
设一个dp数组 dp i j 表示第i个点 j字母的个数
然后边拓扑边转移
就搞出来了

1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cstdlib>
5 #include<cmath>
6 #include<algorithm>
7 #include<queue>
8 #include<vector>
9 #include<map>
10 #define inf 2139062143
11 #define ll long long
12 #define MAXN 301010
13 using namespace std;
14 inline int read()
15 {
16 int x=0,f=1;char ch=getchar();
17 while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
18 while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
19 return x*f;
20 }
21 int n,fst[MAXN],nxt[MAXN<<1],to[MAXN<<1],cnt,m,val[MAXN],f[MAXN][30],ind[MAXN],ans,tot;
22 void add(int u,int v) {nxt[++cnt]=fst[u],fst[u]=cnt,to[cnt]=v,ind[v]++;}
23 int main()
24 {
25 n=read(),m=read();int a,b;
26 char ch[MAXN];
27 scanf("%s",ch);
28 for(int i=0;i<n;i++) val[i+1]=ch[i]-'a'+1;
29 for(int i=1;i<=m;i++) {a=read(),b=read();add(a,b);if(a==b) {puts("-1");return 0;}}
30 queue <int> q;
31 for(int i=1;i<=n;i++) {f[i][val[i]]=1;if(!ind[i]) q.push(i);}
32 int x;
33 while(!q.empty())
34 {
35 x=q.front();q.pop();
36 tot++;
37 for(int i=fst[x];i;i=nxt[i])
38 {
39 ind[to[i]]--;
40 if(!ind[to[i]]) q.push(to[i]);
41 for(int j=1;j<=26;j++)
42 {
43 if(f[to[i]][j]<f[x][j]&&j!=val[to[i]]) f[to[i]][j]=f[x][j],ans=max(ans,f[to[i]][j]);
44 if(f[to[i]][j]<f[x][j]+1&&j==val[to[i]]) f[to[i]][j]=f[x][j]+1,ans=max(ans,f[to[i]][j]);
45 }
46 }
47 }
48 if(tot!=n) {puts("-1");return 0;}
49 printf("%d",ans);
50 }
T5:
求一个正整数n<=x 使
思路:
通过题解的打表

然后可以枚举j 可以知道 b·a^(-j) 和 j-i 对p同余
然后就求一下逆元搞一下 求一下i 就行了

1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cstdlib>
5 #include<cmath>
6 #include<algorithm>
7 #include<queue>
8 #include<vector>
9 #include<map>
10 #define inf 2139062143
11 #define ll long long
12 #define MAXN 1001001
13 using namespace std;
14 inline ll read()
15 {
16 ll x=0,f=1;char ch=getchar();
17 while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
18 while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
19 return x*f;
20 }
21 ll inv[MAXN],a,b,p,x,tmp=1,ans;
22 int main()
23 {
24 a=read(),b=read(),p=read(),x=read(),inv[1]=1;
25 for(ll i=2;i<p;i++) inv[i]=(p-p/i)*inv[p%i]%p;
26 for(ll i=0;i<p-1;i++,(tmp*=a)%=p)
27 ans+=(x-((i+p-b*inv[tmp]%p)%p*(p-1)+i)+p*(p-1))/p/(p-1);
28 printf("%I64d",ans);
29 }
来源:https://www.cnblogs.com/yyc-jack-0920/p/8397738.html
