-
A
- Problem - 377A - Codeforces
- 题目分析:保证在替换'X'后'.'区域相连
#include<bits/stdc++.h> using namespace std; int t,i,n,y,z=512;//因为输入的行数在1~512之间,eg:行数为4时就要z=5时才输出不乱码 char q[262144];//为了保证能存下数据用2的18次方存2的9次方的平方 void w(int i){ if(t&&q[i]==88/*X*/)//第二种情况是没有消耗完w就走完了,出去后是初始的0了 q[i]=46/*'.'*/,t++,w(i-z),w(i+z),w(i-1),w(i+1); } int main(){ for(scanf("%d%d%d",&n,&y,&t); i<n; scanf("%s",q+(++i*z)));//数据实际是用一维度数组存储的,写个512保证就算一行输满500个也不影响 for(i=0;i<z*z;i++) //又因为字符串数组会自带一个'\0'终止符所以就有了eg的情况 if(q[i]==46) //对表象二维迷宫地图实际一维数组全部遍历//并且用2的次方数可以加快读取速度 q[y=i]=88,t--;//q = [10, 20, 30, 40, 50],i = 2,y = q[i] for(w(y); t<n; printf("%s\n",q+(++t*z))); return 0; }
解决问题的反思:降维编程,升维思考。
-
B
#import<iostream> using namespace std; int main() { string s; cin>>s; long long res=0,q=1,r=0,mod=1e9+7,i,e,n=s.size(); for(i=n;--i+1;) { e=(i*(i+1)/2*q+r)%mod; res=(res+e*(s[i]-48))%mod; r=(r+(n-i)*q)%mod;q=q*10%mod; } cout<<res; }
-
C
-
D
#include <bits/stdc++.h> using namespace std; int main() {int t,r,l,n,q; string s; cin>>t; while(t--){ cin>>n>>q>>s; while(q--){ cin>>l>>r; cout<<(((s.find(s[l-1])<l-1)||(s.rfind(s[r-1])>r-1))?"YES\n":"NO\n"); } } return 0; }
-
E
#include<bits/stdc++.h> using namespace std; long long i,k,n,s,t,a[200040]; main() { for(cin>>t;t--;) { cin>>n>>k; for(i=s=0;i<n*k;i++)cin>>a[i]; for(i=(n-1)/2*k;i<n*k;i+=n/2+1)s+=a[i]; cout<<s<<endl; } }
-
F
-
G
#include <bits/stdc++.h> using namespace std; int t,n,m; char s[110][110]; int main() { cin>>t; while (t--) { cin>>n>>m; for (int i=0;i<n;i++) scanf("%s",s[i]); int num=0; for (int i=0;i<n;i++) for (int j=0;j<m;j++) if (s[i][j]=='1') num++; num*=3; printf("%d\n",num); for (int i=0;i<n;i++) for (int j=0;j<m;j++) if (s[i][j]=='1') { int ki=1,kj=1; if (i==n-1) ki=-1; if (j==m-1) kj=-1; printf("%d %d %d %d %d %d\n",i+1,j+1,i+ki+1,j+1,i+1,j+kj+1); printf("%d %d %d %d %d %d\n",i+1,j+1,i+ki+1,j+kj+1,i+1,j+kj+1); printf("%d %d %d %d %d %d\n",i+1,j+1,i+ki+1,j+1,i+ki+1,j+kj+1); } } }