B. Putting Bricks in the Wall
我们只需要知道Pink一开始走出起点的限制有两个格子( 1 , 2 ) (1,2)(1,2)和(2,1),走到终点也有两个格子限制( n − 1 , n ) (n-1,n)(n−1,n)和( n , n − 1 ) (n,n-1)(n,n−1)。那么只要使得这起点格子和终点格子起冲突即可。让这两组的格子元素值相反即可。
#include<bits/stdc++.h> using namespace std; int main(){ int t; cin>>t; while(t--){ int n; cin>>n; string s[n+5]; for(int i=0;i<n;i++){ cin>>s[i]; } vector<pair<int,int>>ans; for(int i=0;i<=1;i++){ ans.resize(0); if(s[0][1]==i+'0'){ ans.push_back({1,2}); } if(s[1][0]==i+'0'){ ans.push_back({2,1}); } if(s[n-1][n-2]==(i^1)+'0'){ ans.push_back({n,n-1}); } if(s[n-2][n-1]==(i^1)+'0'){ ans.push_back({n-1,n}); } //当小于等于2时,说明已是最优情况 if(ans.size()<=2){ break; } } cout<<ans.size()<<endl; for(auto it:ans){ cout<<it.first<<' '<<it.second<<endl; } } }第三题: C. Palindromifier
解析: 先复制L 2, 然后复制2 之后的,然后复制2之前的size() * 2 - 1
#include<bits/stdc++.h> using namespace std; string s; int main(){ cin>>s; printf("3\nL 2\nR 2\nR %d",2*s.size()-1); }第四题: D. Hexagons
#include<bits/stdc++.h> using namespace std; typedef long long int ll; int main(){ int t; cin>>t; while(t--){ ll x,y,c1,c2,c3,c4,c5,c6; cin>>x>>y; cin>>c1>>c2>>c3>>c4>>c5>>c6; ll ans=(x>=0?c6:c3)*abs(x)+(y>=0?c2:c5)*abs(y); ans=min(ans,(x>=0?c1:c4)*abs(x)+(y-x>=0?c2:c5)*abs(y-x)); ans=min(ans,(y>=0?c1:c4)*abs(y)+(y-x>=0?c3:c6)*abs(y-x)); cout<<ans<<endl; } }