NKU 专题一 题解

A - Flip Game

总的情况数只有2^16次方种,显然直接bfs就可以了

 1 #include<iostream>
 2 #include<queue>
 3 #include<cstring>
 4 using namespace std;
 5 int W,B,start;
 6 bool have[1000000];
 7 struct plot{
 8     int n,step;
 9 };
10 void input(int &n){
11     n=0;
12     char c;
13     for(int i=0;i<16;i++){
14         cin>>c;
15         if(c=='b')n=n|(1<<i);
16     }
17 }
18 void turn(int &n,int k){
19     n=n^(1<<k);
20     if(k%4)n=n^(1<<(k-1));
21     if(k%4!=3)n=n^(1<<(k+1));
22     if(k/4)n=n^(1<<(k-4));
23     if(k/4<3)n=n^(1<<(k+4));
24 }
25 bool bfs(){
26     queue<plot> q;
27     plot p;
28     p.n=start;p.step=0;
29     q.push(p);
30     memset(have,0,sizeof(have));
31     while(!q.empty()){
32         int cur=q.front().n,step=q.front().step;
33         q.pop();
34         if(have[cur])continue;
35         if(cur==W||cur==B){
36             cout<<step<<endl;
37             return true;
38         }
39         for(int i=0;i<16;i++){
40             p.n=cur;
41             turn(p.n,i);
42             p.step=step+1;
43             if(!have[p.n])
44                 q.push(p);
45         }
46         have[cur]=true;
47     }
48     return false;
49 }
50 int main(){
51     W=0;B=0;
52     for(int i=0;i<16;i++){
53         B=B|(1<<i);
54     }
55     input(start);
56     if(!bfs())cout<<"Impossible"<<endl;
57     return 0;
58 }
View Code

B - The Pilots Brothers' refrigerator

 直接搜应该是可以的,但是不知道为什么一直T..

注意到如果要改变(i,j),只需要把这个十字上的全部点一遍,结果就只有(i,j)改变.改变了偶数次的相当于没有改变.

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int have[4][4];
 5 int main(){
 6     for(int i=0;i<4;i++)
 7         for(int j=0;j<4;j++)have[i][j]=0;
 8     int a[4][4];
 9     char c;
10     for(int i=0;i<4;i++)
11     for(int j=0;j<4;j++){
12         cin>>c;
13         if(c=='+')a[i][j]=0;
14         else a[i][j]=1;
15     }
16     for(int i=0;i<4;i++){
17         for(int j=0;j<4;j++){
18             if(a[i][j]==0){
19                 for(int k=0;k<4;k++){
20                     have[i][k]+=1;
21                     have[k][j]+=1;
22                 }
23                 have[i][j]-=1;
24             }
25         }
26     }
27     int count=0;
28     for(int i=0;i<4;i++){
29         for(int j=0;j<4;j++)
30             if(have[i][j]%2)
31                 count++;
32     }
33     cout<<count<<endl;
34     for(int i=0;i<4;i++){
35         for(int j=0;j<4;j++)
36             if(have[i][j]%2)
37                 cout<<i+1<<' '<<j+1<<endl;
38     }
39     return 0;
40 }
View Code

C - Radar Installation

 勾股定理先算一下每个小岛对应x轴上的一个区间,雷达放在这个区间内都可以扫到这个小岛,然后贪心一下就行了,按区间左端点排序,每次都放在未取点的区间左端点.

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 const int maxn=1005;
 7 int n,d,x[maxn],y[maxn],k[maxn],Max[maxn];
 8 bool have[maxn];
 9 double l[maxn],r[maxn];
10 bool Cmpk(int i,int j){
11     if(l[i]==l[j])return r[i]>r[j];
12     return l[i]>l[j];
13 }
14 bool Cmpm(int i,int j){
15     return r[i]>r[j];
16 }
17 void turn(){
18     for(int i=0;i<n;i++){
19         l[i]=x[i]-sqrt((double)d*d-y[i]*y[i]);
20         r[i]=x[i]+sqrt((double)d*d-y[i]*y[i]);
21     }
22     sort(k,k+n,Cmpk);
23     sort(Max,Max+n,Cmpm);
24 }
25 int solve(){
26     turn();
27     int j=0,count=0;
28     for(int i=0;i<n;i++){
29         if(have[k[i]])continue;
30         have[k[i]]=true;
31         count++;
32         while(j<n&&l[k[i]]<=r[Max[j]]){
33             have[Max[j]]=true;j++;
34         }
35     }
36     return count;
37 }
38 int main(){
39     int kase=0;
40     while(cin>>n>>d&&n){
41         memset(have,0,sizeof(have));
42         bool ans=true;
43         for(int i=0;i<n;i++){
44             cin>>x[i]>>y[i];
45             k[i]=i;
46             Max[i]=i;
47             if(y[i]>d){
48                 ans=false;
49             }
50         }
51         if(ans)cout<<"Case "<<++kase<<": "<<solve()<<endl;
52         else cout<<"Case "<<++kase<<": "<<-1<<endl;
53     }
54     return 0;
55 }
View Code

D - Power of Cryptography

显然要用高精度..然后二分一下答案..一开始一直T,应该是卡在二分的死循环上,如果一定有解,肯定可以跳出循环的..题目应该是有问题的,不一定有恰好等的k,而是k^n<=p,取最大的k,加上这个就过了...

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<string>
  4 #include<vector>
  5 #include<iomanip>
  6 #include<cmath>
  7 using namespace std;
  8 const int BASE=1000000000,WIDTH=9;
  9 typedef long long ll;
 10 struct BigInt{
 11     bool neg;
 12     vector<int> s;
 13     BigInt operator =(string &str){
 14         s.clear();
 15         neg=false;
 16         if(str[0]=='-'){
 17             neg=true;
 18             str[0]='0';
 19         }
 20         int x,len=(str.length()-1)/WIDTH+1;
 21         for(int i=0;i<len;i++){
 22             int end=str.length()-i*WIDTH;
 23             int start=max(0,end-WIDTH);
 24             sscanf(str.substr(start,end-start).c_str(),"%d",&x);
 25             s.push_back(x);
 26         }
 27         return *this;
 28     }
 29     BigInt operator =(int n){
 30         s.clear();
 31         if(n<0){
 32             neg=true;
 33             s.push_back(-n);
 34         }else{
 35             neg=false;
 36             s.push_back(n);
 37         }
 38         return *this;
 39     }
 40     void print(){
 41         if(neg)cout<<'-';
 42         cout<<s.back();
 43         for(int i=s.size()-2;i>=0;i--){
 44             cout<<setw(8)<<setfill('0')<<s[i];
 45         }
 46         cout<<endl;
 47     }
 48 };
 49 bool operator ==(const BigInt &a,const BigInt &b){
 50     if(a.neg!=b.neg)return false;
 51     if(a.s.size()==b.s.size()){
 52         for(int i=0;i<a.s.size();i++)
 53             if(a.s[i]!=b.s[i])return false;
 54         return true;
 55     }
 56     return false;
 57 }
 58 bool operator<(BigInt &a,BigInt &b){
 59     if(a.neg&&!b.neg)return true;
 60     if(!a.neg&&b.neg)return false;
 61     if(a.neg&&b.neg){
 62         a.neg=b.neg=false;
 63         bool ans=a<b||a==b;
 64         a.neg=b.neg=true;
 65         return !ans;
 66     }
 67     if(a.s.size()<b.s.size())return true;
 68     else if(a.s.size()>b.s.size())return false;
 69     for(int i=a.s.size()-1;i>=0;i--){
 70         if(a.s[i]==b.s[i])continue;
 71         if(a.s[i]<b.s[i])return true;
 72         return false;
 73     }
 74     return false;
 75 }
 76 bool operator >(BigInt &a,BigInt &b){return !(a==b&&a<b);}
 77 bool operator <=(BigInt &a,BigInt &b){return (a==b||a<b);}
 78 bool operator >=(BigInt &a,BigInt &b){return !(a<b);}
 79 bool operator !=(BigInt &a,BigInt &b){return !(a==b);}
 80 BigInt operator -(BigInt &a,BigInt &b);
 81 BigInt operator +(BigInt &a,BigInt &b){
 82     BigInt ans;
 83     if(a.neg&&!b.neg){
 84         a.neg=false;
 85         ans=b-a;
 86         a.neg=true;
 87         return ans;
 88     }
 89     if(!a.neg&&b.neg){
 90         b.neg=false;
 91         ans=a-b;
 92         b.neg=true;
 93         return ans;
 94     }
 95     ans.neg=a.neg;
 96     int k=0,i=0;
 97     while(i<a.s.size()||i<b.s.size()){
 98         if(i<a.s.size())k+=a.s[i];
 99         if(i<b.s.size())k+=b.s[i];
100         ans.s.push_back(k%BASE);
101         k/=BASE;
102         i++;
103     }
104     if(k)ans.s.push_back(k);
105     return ans;
106 }
107 BigInt operator -(BigInt &a,BigInt &b){
108     BigInt ans;
109     if(!a.neg&&b.neg){
110         b.neg=false;
111         ans=a+b;
112         b.neg=true;
113         return ans;
114     }
115     if(a.neg&&!b.neg){
116         a.neg=false;
117         ans=a+b;
118         a.neg=true;
119         ans.neg=true;
120         return ans;
121     }
122     if(a.neg&&b.neg&&a>b){
123         b.neg=a.neg=false;
124         ans=b-a;
125         b.neg=a.neg=true;
126         return ans;
127     }
128     if(!a.neg&&!b.neg&&a<b){
129         ans=b-a;
130         ans.neg=true;
131         return ans;
132     }
133     ans.neg=false;
134     int k=0,i=0;
135     while(i<a.s.size()||i<b.s.size()){
136         if(i<a.s.size())k+=a.s[i];
137         if(i<b.s.size())k-=b.s[i];
138         if(k<0){
139             ans.s.push_back(k+BASE);
140             k=-1;
141         }else{
142             ans.s.push_back(k);
143             k=0;
144         }
145         i++;
146     }
147     while(ans.s.size()>1&&i>=0&&ans.s[--i]==0)ans.s.pop_back();
148     return ans;
149 }
150 BigInt operator *(BigInt &a,BigInt &b){
151     if(a.s.size()<b.s.size())return b*a;
152     BigInt ans;
153     ll k=0;
154     for(int l=0;l<a.s.size()+b.s.size()-1;l++){
155         for(int i=min(l,int(a.s.size()-1));i>=0&&l-i<b.s.size();i--){
156             k+=(ll)a.s[i]*b.s[l-i];
157         }
158         ans.s.push_back(k%BASE);
159         k/=BASE;
160     }
161     if(k)ans.s.push_back(k);
162     ans.neg=a.neg^b.neg;
163     return ans;
164 }
165 BigInt operator *(BigInt &a,int b){
166     BigInt ans;
167     ll k=0;
168     for(int l=0;l<a.s.size();l++){
169         k+=a.s[l]*b;
170         ans.s.push_back(k%BASE);
171         k/=BASE;
172     }
173     if(k)ans.s.push_back(k);
174     if((b<0&&a.neg)||(b>0&&!a.neg))ans.neg=false;
175     else ans.neg=true;
176     return ans;
177 }
178 inline void devide_2(BigInt &a){
179     int k=0;
180    // a.print();
181     for(int i=a.s.size()-1;i>=0;i--){
182         int k0=k;
183         k=a.s[i]%2==0?0:BASE/2;
184         //cout<<a.s[i]<<endl;
185         a.s[i]=k0+a.s[i]/2;
186         //cout<<a.s[i]<<endl;
187     }
188     if(a.s.back()==0)a.s.pop_back();
189 }
190 inline BigInt devide(BigInt &a,BigInt &b,BigInt &r){
191     BigInt L,R,m,t;
192     L=1;R=a;
193     if(a<b){
194         r=a;
195         return m=0;
196     }
197     while(R>L){
198         //L.print();
199         //R.print();
200         t=(R+L);
201         devide_2(t);
202         if(t==L){
203             m=t*b;
204             r=a-m;return L;
205         }
206         m=t*b;
207         //m.print();
208         if(m==a){
209             r=0;return t;
210         }else if(m<a){
211             L=t;
212         }else{
213             R=t;
214         }
215     }
216     m=t*b;
217     r=a-m;
218     return L;
219 }
220 inline BigInt operator%(BigInt &a,BigInt &b){
221     BigInt r;
222     devide(a,b,r);
223     return r;
224 }
225 inline bool Is_even(const BigInt &a){
226     if(a.s[0]%2==0)return true;
227     return false;
228 }
229 //计算n的k次方模p
230 BigInt qpow(BigInt &n,int k){
231     BigInt ans,y;
232     int _n=k;
233     //n.print();k.print();p.print();
234     ans=1;y=n;
235     while(_n>=1){
236         if(_n%2){
237             ans=(ans*y);
238             //ans.print();
239             ans=ans;
240             //ans.print();
241         }
242         y=y*y;
243         //y.print();
244         y=y;
245         //y.print();
246         //cout<<"---------\n";
247         _n/=2;
248        // _n.print();
249     }
250     return ans;
251 }
252 BigInt p;
253 int n,len;
254 void solve(){
255     BigInt l,r,m;
256     l=pow(10.0,(double)len/n-1);
257     r=pow(10.0,(double)len/n+1);
258     if(qpow(r,n)==p){
259         r.print();return;
260     }
261     while(1){
262         m=l+r;
263         devide_2(m);
264         if(m==l){
265             l.print();
266             return;
267         }
268         //m.print();
269         BigInt q=qpow(m,n);
270         if(q==p){
271             m.print();return;
272         }
273         if(q<p){
274             l=m;continue;
275         }else{
276             r=m;continue;
277         }
278     }
279 }
280 int main(){
281     //freopen("e:\\in.txt","r",stdin);
282     string s;
283     while(cin>>n){
284         cin>>s;
285         len=s.length();
286         p=s;
287         solve();
288     }
289 
290 }
View Code

E - Y2K Accounting Bug

 只有12个月,总的情况数是2^12次方,枚举一下.需要一些优化,比如目前可行解最多k个月盈利,那么小于等于k个月盈利的就可以不用算了.还可以通过s/d,比如s/d<=1/5,1/4<=s/d<=1/2都是不可能盈利的情况.

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int m[12],s,d;
 6 int surplus(){
 7     int ans=0;
 8     int surmonth=0;
 9     for(int i=0;i<(1<<12);i++){
10         int count1=0;
11         for(int j=0;j<12;j++){
12             count1+=(i&(1<<j))?1:0;
13         }
14         if(count1<=surmonth||count1*s-(12-count1)*d<=0)continue;
15         for(int j=0;j<12;j++)
16             m[j]=i&(1<<j);
17             bool ok=true;
18         for(int j=0;j<8;j++){
19             int sur=0;
20             for(int k=0;k<5;k++){
21                 if(m[j+k])sur+=s;
22                 else sur-=d;
23             }
24             if(sur>=0){
25                 ok=false;break;
26             }
27         }
28         if(ok){
29             surmonth=count1;
30             int sur=count1*s-(12-count1)*d;
31             if(sur>ans)ans=sur;
32         }
33     }
34     return ans;
35 }
36 int main(){
37 //    freopen("e:\\in.txt","r",stdin);
38 //    freopen("e:\\out.txt","w",stdout);
39     while(cin>>s>>d){
40 //        if((d<2*s&&3*s<2*d)||(d>4*s&&5*s>d))cout<<surplus()<<endl;
41 //        else cout<<"Deficit"<<endl;
42         int ans=surplus();
43         if(ans)cout<<ans<<endl;
44         else cout<<"Deficit"<<endl;
45     }
46     return 0;
47 }
View Code

F - Ubiquitous Religions

就是求连通块的个数,并查集求一下就行了..

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn=50005;
 6 int n,m,p[maxn];
 7 int Find(int x){return p[x]==x?x:p[x]=Find(p[x]);}
 8 int main(){
 9     int kase=0;
10     while(scanf("%d%d",&n,&m)!=EOF&&n){
11         int count=n;
12         for(int i=0;i<n;i++)p[i]=i;
13         int x,y;
14         for(int i=0;i<m;i++){
15             scanf("%d%d",&x,&y);
16             x--;y--;
17             if(Find(x)==Find(y))continue;
18             p[Find(x)]=y;
19             count--;
20         }
21         printf("Case %d: %d\n",++kase,count);
22     }
23     return 0;
24 }
View Code

G - Tiling

 显然可以得到递推式f(n)=f(n-1)+2*f(n-2),n只有250,也不需要矩阵了,高精度打个表...

 1 import java.io.*;
 2 import java.util.*;
 3 import java.math.BigInteger;
 4 public class Main {
 5     public static void main(String arg[]){
 6         BigInteger a=BigInteger.valueOf(1),b=BigInteger.valueOf(1);
 7         String s[]=new String[260];
 8         s[0]="1";s[1]="1";
 9         for(int i=2;i<=255;){
10             a=b.add(a).add(a);
11             s[i++]=a.toString();
12             b=a.add(b).add(b);
13             s[i++]=b.toString();
14         }
15         Scanner sc=new Scanner(System.in);
16         int n;
17         while(sc.hasNext()){
18             n=sc.nextInt();
19             System.out.println(s[n]);
20         }
21     }
22 
23 }
View Code

H - Tautology

 只有5个小写字母,总的情况就是2^5,枚举一下是不是每次结果都为真就行了.式子的处理类似计算器,递归一下.

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 bool b[5]={0,0,0,0,0};
 5 int f(char c){
 6     switch(c){
 7     case 'p':return 0;
 8     case 'q':return 1;
 9     case 'r':return 2;
10     case 's':return 3;
11     case 't':return 4;
12     }
13 }
14 bool Is_up(char c){
15     if(c>='A'&&c<='Z')return true;
16     return false;
17 }
18 bool Is_true(char *s){
19     int count=0;
20     int n=strlen(s);
21     if(s[0]=='N')return !Is_true(s+1);
22     if(!Is_up(s[0]))return b[f(s[0])];
23     int mid=1;
24     if(!Is_up(s[1]))mid=1;
25     else{
26         mid=1;
27         for(int i=1;i<n;i++,mid++){
28             if(s[i]=='N')count+=0;
29             else if(Is_up(s[i]))count+=1;
30             else count-=1;
31             if(count==-1)break;
32         }
33     }
34     switch(s[0]){
35         case 'K':return Is_true(s+1)&&Is_true(s+mid+1);
36         case 'A':return Is_true(s+1)||Is_true(s+mid+1);
37         case 'C':return !(Is_true(s+1)==1&&Is_true(s+mid+1)==0);
38         case 'E':return Is_true(s+1)==Is_true(s+mid+1);
39     }
40 }
41 bool Is_tau(char *s){
42     for(int i=0;i<32;i++){
43         for(int j=0;j<5;j++)
44             b[j]=i&(1<<j);
45         if(!Is_true(s))return false;
46     }
47     return true;
48 }
49 int main(){
50     char s[105];
51     while(cin>>s&&s[0]!='0'){
52         if(Is_tau(s))cout<<"tautology\n";
53         else cout<<"not\n";
54     }
55     return 0;
56 }
View Code

I - Parencodings

 P先转S,S再转W

 1 #include<iostream>
 2 using namespace std;
 3 const int maxn=25;
 4 int s[2*maxn],p[maxn],w[maxn],n;
 5 void p_s(){
 6     for(int i=n-1;i>0;i--)
 7         p[i]-=p[i-1];
 8     int j=0;
 9     for(int i=0;i<n;i++){
10         while(p[i]){
11             s[j++]=1;
12             p[i]--;
13         }
14         s[j++]=0;
15     }
16 }
17 void s_w(){
18     int r[maxn],_n=0;
19     for(int i=0;i<2*n;i++){
20         if(s[i]==0)r[_n++]=i;
21     }
22     for(int i=n-1;i>=0;i--){
23         int j=r[i]-1,count=1;
24         while(j>=0&&count){
25             if(s[j])count--;
26             else count++;
27             j--;
28         }
29         w[i]=(r[i]-j)/2;
30     }
31 }
32 int main(){
33     int t;
34     cin>>t;
35     while(t--){
36         cin>>n;
37         for(int i=0;i<n;i++)
38             cin>>p[i];
39         p_s();
40         s_w();
41         for(int i=0;i<n;i++){
42             if(i)cout<<' ';
43             cout<<w[i];
44         }
45         cout<<endl;
46     }
47     return 0;
48 }
View Code

后面四道就是纯水模拟了...

J - Crashing Robots

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 using namespace std;
  5 const int maxn=105;
  6 int house[maxn][maxn],A,B;
  7 char d[4]={'N','E','S','W'};
  8 char ok[100]="OK";
  9 char ans[100];
 10 int f(char c){
 11     switch(c){
 12         case 'N':return 0;
 13         case 'E':return 1;
 14         case 'S':return 2;
 15         case 'W':return 3;
 16     }
 17 }
 18 //-1ÊÇǽ
 19 int Is_crash(int x,int y){
 20     if(x==0||x==A+1||y==0||y==B+1)return -1;
 21     return house[x][y];
 22 }
 23 class robot{
 24     int x,y,order;
 25     char dir;
 26 public:
 27     void input(int t){
 28         cin>>x>>y>>dir;
 29         order=t;
 30         house[x][y]=t;
 31     }
 32     void move(char c,int time){
 33         if(strcmp(ans,"OK"))return;
 34         switch(c){
 35             case 'L':dir=d[(f(dir)-time%4+4)%4];break;
 36             case 'R':dir=d[(f(dir)+time)%4];break;
 37             default:switch(dir){
 38             case 'N':
 39                 for(int i=0;i<time;i++){
 40                     y++;
 41                     int k=Is_crash(x,y);
 42                     if(k==-1){sprintf(ans,"Robot %d crashes into the wall",order);break;}
 43                     else if(k){sprintf(ans,"Robot %d crashes into robot %d",order,k);break;}
 44                     house[x][y-1]=0;
 45                     house[x][y]=order;
 46                 }
 47                 break;
 48             case 'S':
 49                 for(int i=0;i<time;i++){
 50                     y--;
 51                     int k=Is_crash(x,y);
 52                     if(k==-1){sprintf(ans,"Robot %d crashes into the wall",order);break;}
 53                     else if(k){sprintf(ans,"Robot %d crashes into robot %d",order,k);break;}
 54                     house[x][y+1]=0;
 55                     house[x][y]=order;
 56                 }
 57                 break;
 58             case 'E':
 59                 for(int i=0;i<time;i++){
 60                     x++;
 61                     int k=Is_crash(x,y);
 62                     if(k==-1){sprintf(ans,"Robot %d crashes into the wall",order);break;}
 63                     else if(k){sprintf(ans,"Robot %d crashes into robot %d",order,k);break;}
 64                     house[x-1][y]=0;
 65                     house[x][y]=order;
 66                 }
 67                 break;
 68             case 'W':
 69                 for(int i=0;i<time;i++){
 70                     x--;
 71                     int k=Is_crash(x,y);
 72                     if(k==-1){sprintf(ans,"Robot %d crashes into the wall",order);break;}
 73                     else if(k){sprintf(ans,"Robot %d crashes into robot %d",order,k);break;}
 74                     house[x+1][y]=0;
 75                     house[x][y]=order;
 76                 }
 77                 break;
 78             }
 79         }
 80     }
 81 }rb[maxn];
 82 int main(){
 83     //freopen("e:\\in.txt","r",stdin);
 84     //freopen("e:\\out.txt","w",stdout);
 85     int t,n,m,num,time;
 86     char mo;
 87     cin>>t;
 88     while(t--){
 89         strcpy(ans,ok);
 90         memset(house,0,sizeof(house));
 91         cin>>A>>B>>n>>m;
 92         for(int i=1;i<=n;i++){
 93             rb[i].input(i);
 94         }
 95         for(int i=0;i<m;i++){
 96             cin>>num>>mo>>time;
 97             rb[num].move(mo,time);
 98         }
 99         cout<<ans<<endl;
100     }
101     return 0;
102 }
View Code

K - Robot Motion

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 const int maxn=15;
 6 char grid[maxn][maxn];
 7 int step[maxn][maxn],x,y,total,n,m,enter;
 8 void solve(){
 9     memset(step,-1,sizeof(step));
10     total=0;x=1;y=enter;
11     step[x][y]=0;
12     while(1){
13         switch(grid[x][y]){
14             case 'N':x--;break;
15             case 'S':x++;break;
16             case 'W':y--;break;
17             case 'E':y++;break;
18         }
19         total++;
20         if(x==0||x==n+1||y==0||y==m+1){
21             cout<<total<<" step(s) to exit"<<endl;return;
22         }
23         if(step[x][y]!=-1){
24             cout<<step[x][y]<<" step(s) before a loop of "<<total-step[x][y]<<" step(s)"<<endl;return;
25         }
26         step[x][y]=total;
27     }
28 }
29 int main(){
30     while(cin>>n>>m>>enter&&n){
31         for(int i=1;i<=n;i++){
32             for(int j=1;j<=m;j++)
33                 cin>>grid[i][j];
34         }
35         solve();
36     }
37     return 0;
38 }
View Code

L - Emag eht htiw Em Pleh

 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 using namespace std;
 5 char ans[20][35];
 6 bool Is_up(char c){
 7     if(c>='A'&&c<='Z')return true;
 8     return false;
 9 }
10 int main(){
11     for(int i=0;i<=16;i+=2){
12         strcpy(ans[i],"+---+---+---+---+---+---+---+---+");
13     }
14     for(int i=3;i<=15;i+=4){
15         strcpy(ans[i],"|:::|...|:::|...|:::|...|:::|...|");
16     }
17     for(int i=1;i<=15;i+=4){
18         strcpy(ans[i],"|...|:::|...|:::|...|:::|...|:::|");
19     }
20     string s;
21     cin>>s;
22     cin>>s;
23     for(int i=0;i<s.size();){
24         if(Is_up(s[i])){
25             ans[17-2*(s[i+2]-'0')][4*(s[i+1]-'a')+2]=s[i];
26             i+=4;
27         }else{
28             ans[17-2*(s[i+1]-'0')][4*(s[i]-'a')+2]='P';
29             i+=3;
30         }
31     }
32     cin>>s;
33     cin>>s;
34     for(int i=0;i<s.size();){
35         if(Is_up(s[i])){
36             ans[17-2*(s[i+2]-'0')][4*(s[i+1]-'a')+2]=s[i]-'A'+'a';
37             i+=4;
38         }else{
39             ans[17-2*(s[i+1]-'0')][4*(s[i]-'a')+2]='p';
40             i+=3;
41         }
42     }
43     for(int i=0;i<=16;i++){
44         cout<<ans[i]<<endl;
45     }
46     return 0;
47 }
View Code

M - Help Me with the Game

 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<vector>
 5 #include<algorithm>
 6 using namespace std;
 7 vector<int> w[26];
 8 vector<int> b[26];
 9 char order[]="KQRBN";
10 bool Cmpw(int i,int j){
11     if(i%16==j%16)return i/16<j/16;
12     return i%16<j%16;
13 }
14 bool Cmpb(int i,int j){
15     if(i%16==j%16)return i/16<j/16;
16     return i%16>j%16;
17 }
18 bool Is_up(char c){
19     if(c>='A'&&c<='Z')return true;
20     return false;
21 }
22 bool Is_low(char c){
23     if(c>='a'&&c<='z')return true;
24     return false;
25 }
26 int main(){
27     string s;
28     for(int i=0;i<26;i++){
29         w[i].clear();
30         b[i].clear();
31     }
32     for(int i=8;i>=1;i--){
33         getline(cin,s);
34         getline(cin,s);
35         for(int j=2;j<=30;j+=4){
36             if(Is_up(s[j])){
37                 w[s[j]-'A'].push_back((j-2)*4+i);
38             }else if(Is_low(s[j])){
39                 b[s[j]-'a'].push_back((j-2)*4+i);
40             }
41         }
42     }
43     getline(cin,s);
44     cout<<"White: ";
45     for(int i=0;i<5;i++){
46         char c=order[i];
47 
48         for(int j=0;j<w[c-'A'].size();j++){
49             if(i||j)cout<<',';
50             cout<<c<<char(w[c-'A'][j]/16+'a')<<w[c-'A'][j]%16;
51         }
52     }
53     sort(w['P'-'A'].begin(),w['P'-'A'].end(),Cmpw);
54     for(int i=0;i<w['P'-'A'].size();i++){
55         cout<<','<<char(w['P'-'A'][i]/16+'a')<<w['P'-'A'][i]%16;
56     }
57     cout<<endl;
58     cout<<"Black: ";
59     for(int i=0;i<5;i++){
60         char c=order[i];
61         for(int j=0;j<b[c-'A'].size();j++){
62             if(i||j)cout<<',';
63             cout<<c<<char(b[c-'A'][j]/16+'a')<<b[c-'A'][j]%16;
64         }
65     }
66     sort(b['P'-'A'].begin(),b['P'-'A'].end(),Cmpb);
67     for(int i=0;i<b['P'-'A'].size();i++){
68         cout<<','<<char(b['P'-'A'][i]/16+'a')<<b['P'-'A'][i]%16;
69     }
70     cout<<endl;
71     return 0;
72 }
View Code

 

转载于:https://www.cnblogs.com/7391-KID/p/7056603.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

子承父业-C#继承

文章目录继承的定义和使用实例继承的特性继承的可传递性继承的单一性继承中的访问修饰符base和this关键字basethis实例博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 继承是软件复用的一种形式。使用继承可以复用现在类的数据和行为&#xff…

MAVEN创建并打包web项目

maven项目是由一个maven project和多个maven module组成的&#xff0c;以下简介一下maven webapp的创建和打包&#xff0c;前提是你已经安装配置好maven了。打开eclipse。依照例如以下操作&#xff1a; 我们首先当然要先创建一个project。如上图选择。 如今maven project已经创…

学界 | CVPR 2018颁布五大奖项,何恺明获年轻学者奖

年度计算机视觉和模式识别盛会CVPR&#xff08;Conference on Computer Vision and Pattern Recognition&#xff09;在美国盐湖城开幕啦&#xff01; 据统计&#xff0c;本届大会有超过3309篇大会论文投稿&#xff0c;接收979篇论文。 面对如此多的论文评审任务&#xff0c;CV…

[BZOJ2458][BeiJing2011]最小三角形

题目描述 Description Xaviera现在遇到了一个有趣的问题。平面上有N个点&#xff0c;Xaviera想找出周长最小的三角形。由于点非常多&#xff0c;分布也非常乱&#xff0c;所以Xaviera想请你来解决这个问题。为了减小问题的难度&#xff0c;这里的三角形也包括共线的三点。 输…

小技巧集锦

2019独角兽企业重金招聘Python工程师标准>>> jackson JsonDeserialize 使用方法&#xff1a; 实现方法注解写在set方法上。 public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {private SimpleDateFormat datetimeFormat new SimpleD…

interface-C#接口-统一的标准

文章目录接口的定义接口的实现实例1实例2接口的继承博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 接口是面向对象编程的一个重要技术&#xff0c;在C#中负责实现多重继承。一个接口定义一个协定&#xff0c;实现接口类或结构体必须遵守其协定…

JMeter入门(1):JMeter总体介绍及组件介绍

一、JMeter概述 JMeter就是一个测试工具&#xff0c;相比于LoadRunner等测试工具&#xff0c;此工具免费&#xff0c;且比较好用&#xff0c;但是前提当然是安装Java环境&#xff1b;JMeter可以做(1)压力测试及性能测试&#xff1b;(2)数据库测试&#xff1b;(3)Java程序的测试…

根据HTML5 获取当前位置的经纬度【百度地图】【高德地图】

是想让地图的定位用户位置更准确一些。 查看了介绍&#xff1a; http://www.w3school.com.cn/html5/html_5_geolocation.asp 看介绍中拿数据挺简单。 <!DOCTYPE html> <html> <body> <p id"demo">点击这个按钮&#xff0c;获得您的坐标&…

C# delegate与event,委托与事件

文章目录委托示例事件实例博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 委托和事件是C#中两个比较复杂的概念&#xff0c;这篇文章介绍两个概念与基本用法&#xff0c;让大家理解C#中的事件处理机制。 委托 委托也叫代理&#xff0c;就是把…

Java的四种引用,强弱软虚,用到的场景(转+补充)

Q1&#xff1a;引用队列是什么&#xff1f;如何使用&#xff1f;使用的场景有哪些&#xff1f; A1:oracle的api文档的描述&#xff1a; https://docs.oracle.com/javase/7/docs/api/java/lang/ref/ReferenceQueue.htmlReference queues, to which registered reference objects…

C# lambda表达式与匿名方法

文章目录匿名方法Lambda表达式实例实例博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 C#中的匿名方法是在C#2.0引入的&#xff0c;它终结了声明委托的唯一方法是使用命名方法的时代。在C#更高版本中&#xff0c;Lambda表达式取代了匿名方法&a…

常用的相似度计算

在数据分析和数据挖掘的过程中&#xff0c;我们经常需要知道个体间差异的大小&#xff0c;进而评价个体的相似性和类别。最常见的是数据分析中的相关分析&#xff0c;数据挖掘中的分 类和聚类算法&#xff0c;如K最近邻&#xff08;KNN&#xff09;和K均值&#xff08;K-Means&…

玩转C#窗体-属性、方法和事件详细说明

文章目录简介Windows窗体的基本属性一、布局属性1、StartPosition属性2、Location属性3、尺寸属性4、WindowsState属性5、Autoscroll属性6、AutoSize属性二、样式属性1、ControlBox属性2、MaximizeBox属性3、MinimizeBox属性4、HelpButton属性5、ShowIcon属性6、Icon属性7、Sho…

for循环和数组练习

//公鸡2文&#xff0c;母鸡1文&#xff0c;小鸡半文&#xff0c;每种至少一只&#xff0c;100文买100只鸡有多少种可能var ci 0; for(var g1;g<50;g){for(var m1;m<100;m){for(var x1;x<100;x){if(g*2m*1x*(0.5)100&&gmx100){ci1;console.log("买公鸡&qu…

c# automapper 使用

一、最简单的用法 有两个类User和UserDto 1 public class User2 {3 public int Id { get; set; }4 public string Name { get; set; }5 public int Age { get; set; }6 }7 8 public class UserDto9 { 10 public string Na…

API设计原则 - Qt官网的设计实践总结

原文链接&#xff1a;API Design Principles - Qt Wiki 基于Gary的影响力上 Gary Gao 的译文稿&#xff1a;C的API设计指导 译文发在酷壳 - CoolShell&#xff1a;API设计原则&#xff0c; 2017-07-25 API设计原则 - Qt官网的设计实践总结 &#x1f34e; 译序 Qt的设计水准在业…

QtCreator5.12.6安装图文教程

前言接触过Qt的同学肯定用过QtCreator,本id最近常用&#xff0c;也就写个教程记录一下安装的过程。可能比较少人学过Qt&#xff0c;感觉Qt还是挺不错的&#xff0c;做出来的界面还算好看&#xff0c;关键是跨平台。说明&#xff1a;安装的系统&#xff1a;win10专业版QtCreator…

H.264学习(一)——帧和场的概念

一、何谓场&#xff1f; 每个电视帧都是通过扫描屏幕两次而产生的&#xff0c;第二个扫描的线条刚好填满第一次扫描所留下的缝隙。每个扫描即称为一个场。因此 25 帧/秒的电视画面实际上为 50 场/秒 (若为 NTSC 则分别为 30 & 60 - 因为我是中国人&#xff0c;因此我采用 P…

RabbitMQ for windows

一、搭建环境 Rabbit MQ 是建立在强大的Erlang OTP平台上&#xff0c;因此安装RabbitMQ之前要先安装Erlang。 erlang&#xff1a;http://www.erlang.org/download.html rabbitmq&#xff1a;http://www.rabbitmq.com/download.html 我目前使用的&#xff1a;http://pan.baidu.c…

圆环内外圆毛刺(凸起)缺口(凹陷)检测halcon

文章目录处理要求处理方法1方法一思路方法一halcon源码处理效果处理方法2方法二思路方法二halcon源码处理效果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 处理要求 椭圆/圆环&#xff08;产品易变形&#xff0c;为椭圆&#xff09;内外圆…