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

NKU 专题一 题解相关推荐

  1. HDU ACM Steps攻略 ACM Steps的全部内容

    原地址:http://www.byywee.com/page/M0/S607/607452.html 总结了一下ACM STEPS的各章内容,趁便附上我的Steps题号(每人的不一样). 别的,此文首 ...

  2. 万字面试分享贴!从十二个角度解析面试全流程!附互联网公司Offer难度系数分析...

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨ELon Z 来源丨AI机器学习与知识图谱 编辑丨极市平台 本 ...

  3. Educational Codeforces Round 96 (Rated for Div. 2) ABCD

    很久不写题解了 因为最近一直在刷acwing和kuangbin的专题 acwing题解直接在acwing上传了 而kuangbin做了几个半个专题 完整了会写题解的 因为身体原因最近总是眼睛疼所以很少 ...

  4. 超详细面经分享!@最近考虑换工作的伙伴们

    文|ELon Z 源|AI机器学习与知识图谱 编|极市平台 本文作者在秋招期间面试了10+家互联网公司,总结了不同公司的考察点以及面试准备的全过程中的经验.帮助大家对各公司有个大致的认知,事半功倍. ...

  5. 如何联系NOI各省特派员?

    NOI各省特派员联系方式: 1.安徽 安徽省计算机学会 朱强 安徽省合肥市经开区莲花路1688号,合肥师范学院计算机科学与技术系,230011 0551-63800700 abelhftc@163.c ...

  6. ACMer,OIer:Comet OJ Contest #0原创题程序设计大赛邀请!

    比赛邀请 2019年3月31日,Comet OJ主办 Comet OJ Contest #0 ,欢迎广大算法爱好者参加~ 第一名奖品:樱桃G80-3000机械键盘,第二名之后有一定比例的T恤和日系短裙 ...

  7. 这些年,这些ACM大佬-陈松扬访谈

    作者:Comet OJ (cometoj.com)运营喵 多去做一些自己本来就不会做的题,从而逼着自己去学自己不会的东西. --陈松扬 今天分享的是2018 CCPC-Wannafly Winter ...

  8. HDU OJ ACM Steps 上的题目详细介绍

    之前在杭电 OJ 上做题,看到有 ACM Steps 这个链接,进去之后发现是一个类似于闯关的机制,可以增加做题人的激情--据说完全通关后会有奖励,不知道是不是真的.但是里面没有题目的分类介绍,每一关 ...

  9. NOI2019竞赛题目征集通知

    NOI2019竞赛题目征集通知 为扩大NOI竞赛的题目来源和范围,进一步提高NOI竞赛试题的质量和水平,CCF NOI科学委员会现面向国内外相关领域的指导教师和学生征集NOI2019的竞赛题目. 征题 ...

最新文章

  1. 程序员面试题精选100题(63)-数组中三个只出现一次的数字[算法]
  2. vue访问完整外部链接数据_【Excel小技巧】链接外部数据的五个方法
  3. ASP.NET Core文件上传IFormFile于Request.Body的羁绊
  4. Asp.Net Core 中IdentityServer4 实战之角色授权详解
  5. c程序设计语言 练习1-6,C程序设计语言:第一章练习
  6. TensorFlow tf.keras.losses.MeanSquaredError
  7. 四轴锁付程序,三菱FX5U发脉冲控制主轴,与好伙伴伺服电批进行MODBUS485通讯,实时采集扭矩和圈数,浮高和滑牙检测
  8. 低频声音功率放大器电子设计报告
  9. python爬虫之爬取招聘岗位信息
  10. 参数构造错误 微信_微信公众号开发常见问题
  11. 中鑫吉鼎|白领投资理财有哪些注意事项
  12. mach3 丝杠的步进电机参数设置
  13. android 仿微信聊天气泡显示图片,仿微信聊天气泡 图片尖角 按下变暗
  14. 由113号元素鉨114号元素夫115号元素镆元素汞银金等元素构成的超导体
  15. 【Zookeeper】分布式集群(详细图文)
  16. 网卡工作模式(混杂模式)
  17. ADI-SigmaDSP开发入门
  18. jQuery——立可得项目心得
  19. 金山快盘 android,金山快盘Android新版正式上线 重视用户体验更便捷
  20. myeclipse中修改字体大小

热门文章

  1. 轨迹预测演变(第1/2部分)
  2. 可持久化数据结构加扫描线_结构化光扫描
  3. 梯度提升树python_梯度增强树回归— Spark和Python
  4. 保护Eclipse RCP应用的商业Java编译器
  5. 炫技式的精彩对辩撑起《哗变》
  6. Julia与R/Python/MATLAB比较及Julia中的Text Analysis模块
  7. android 开启wifi失败,[求助]获取基站/wifi信息为空或失败
  8. mysql int 最大显示宽度_mysql int 整数类型 解释显示宽度 和 存储宽度
  9. excel怎么启用宏_IT技巧分享51: 解决打开Excel文件提示发现不可读取的内容
  10. linux命令 重定向%3e,linux输出信息调试信息重定向