A
#include<bits/stdc++.h> using namespace std; int n; int a[10004],b[100004]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } int ans=0; int hh=0; a[0]=0; a[n+1]=1001; for(int i=1;i<=n;i++) { if(a[i-1]+1==a[i]&&a[i]+1==a[i+1]) ans++; else ans=0; hh=max(hh,ans); } printf("%d\n",hh); }
B 「木」迷雾森林
#include<bits/stdc++.h> using namespace std; int m,n; int t[3002][3004]; int tt[3002][3004]; int dp[3003][3004]; int ans=0; template<class T>inline void read(T &res) { char c;T flag=1; while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;res=c-'0'; while((c=getchar())>='0'&&c<='9')res=res*10+c-'0';res*=flag; } int main() { read(n); read(m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { int xx; read(xx); t[i][j]=xx; } } dp[n][0]=1; for(int i=n;i>=1;i--) { for(int j=1;j<=m;j++) { if(t[i][j]) continue; dp[i][j]=dp[i][j-1]+dp[i+1][j]; dp[i][j]=dp[i][j]%2333; } } printf("%d\n",dp[1][m]%2333); }
C 「土」秘法地震 二维差分
#include<bits/stdc++.h> using namespace std; int n,m,k; int a[1004][1004]; char s[1004][1004]; int main() { scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++) { // for(int j=1;j<=m;j++) // { scanf("%s",s[i]+1); // } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { a[i][j]=s[i][j]-'0'+a[i-1][j]+a[i][j-1]-a[i-1][j-1]; // printf("%d ",a[i][j]); } // printf("\n"); } int ans=0; for(int i=1;i<=n-k+1;i++) { for(int j=1;j<=m-k+1;j++) { int s=a[i+k-1][j+k-1]-a[i-1][j+k-1]-a[i+k-1][j-1]+a[i-1][j-1]; if(s) { ans++; // printf("%d %d\n",i,j); } } } printf("%d\n",ans); }
D 「金」初心如金 异或运算性质
#include<bits/stdc++.h> using namespace std; long long n; int main() { cin>>n; long long x; scanf("%d",&x);//x必为奇数 // 奇 ^ 1 = 偶 // 奇 ^ 0 = 奇 for(int i=0;i<n-1;i++) { scanf("%d",&x); if(x%2) printf("0\n"); else printf("1\n"); } }
F 「水」悠悠碧波 哈希处理
#include<bits/stdc++.h> #define ull unsigned long long const ull B= 10000007; using namespace std; vector<int> aa; char s[1000006]; int l=0; int maxl; int ma() { int ans=0; ull ah=0,bh=0; ull t=1; for(int i=0;i<l/3-1;i++) { ah=ah*B+s[i]; bh=bh+s[l-1-i]*t; if(ah==bh) { aa.push_back(i+1); ans++; } t*=B; // printf("ans=%d\n",ans); } return ans; } int pd(int lm) { ull t=1; for(int i=0;i<lm;i++) t*=B; ull ah=0,bh=0; for(int i=0;i<lm;i++) ah=ah*B+s[i]; for(int i=0;i<lm;i++) bh=bh*B+s[i]; for(int i=lm;i<l-lm;i++) { bh=bh*B+s[i]-s[i-lm]*t; if(i-lm>=lm&&bh==ah) return 1; } return 0; } int main() { cin>>s; l=strlen(s); int maxl=ma(); // printf("maxl=%d\n",maxl); for(int i=maxl;i>=1;i--) { // printf("i=%d\n",aa[i-1]); if(pd(aa[i-1])) { for(int j=0;j<aa[i-1];j++) { printf("%c",s[j]); } printf("\n"); return 0; } } }
G 「金」点石成金 dfs
#include<bits/stdc++.h> #define ll long long using namespace std; ll a[20],b[20],c[20],d[20]; ll cf=0,mf=0; int n; ll ans=0; void dfs(int i,int way) { if(i==n) { ans=max(ans,cf*mf); return ; } ll t; // i++; cf+=a[i]; t=mf; mf=max(0*1ll,mf-b[i]); dfs(i+1,1); mf=t; cf-=a[i]; t=cf; cf=max(0*1ll,cf-d[i]); mf+=c[i]; dfs(i+1,0); cf=t; mf-=c[i]; } int main() { // cin>>n; scanf("%d",&n); for(int i=0;i<n;i++) { // printf("?\n"); // cin>>a[i]>>b[i]>>c[i]>>d[i]; scanf("%lld%lld%lld%lld",&a[i],&b[i],&c[i],&d[i]); } ll t; int i=0; cf+=a[i]; t=mf; mf=max(0*1ll,mf-b[i]); dfs(1,1); mf=t; cf-=a[i]; t=cf; cf=max(0*1ll,cf-d[i]); mf+=c[i]; dfs(1,0); cf=t; mf-=c[i]; printf("%lld\n",ans); }
H 「土」巨石滚滚 贪心 排序
#include<bits/stdc++.h> using namespace std; long long n,m; int q; int Q[500005]; struct node { long long a,b,c; }A[500005]; bool cmp1(node & A,node & B) { return A.a<B.a; } bool cmp2(node & A,node & B) { return A.b>B.b; } bool cmp3(node & A,node & B) { return A.c>B.c; } int main() { cin>>q; while(q--) { scanf("%lld%lld",&n,&m); int num=0; for(int i=0;i<n;i++) { scanf("%lld%lld",&A[i].a,&A[i].b); A[i].c=A[i].b-A[i].a; if(A[i].c>0) num++; } sort(A,A+n,cmp3);//收益为正 的 越靠前 sort(A,A+num,cmp1);//确保收益为正中 代价最小越靠前 sort(A+num,A+n,cmp2);//收益为负中 恢复量越多越靠前 //不能 代价越小越靠前 因为 所有都能撞的条件为 消耗为 -(A[num~n].c-A[n].b) 最后一个的收益获取没意义 //则需要使最后浪费的那个收益最小 int flag=0; for(int i=0;i<n;i++) { if(m<A[i].a) { flag=1; break; } m+=A[i].c; } if(flag)printf("No\n"); else printf("Yes\n"); } }