P1042 [NOIP2003 普及组] 乒乓球
乒乓球运动比赛规则11分制: 在一局比赛中,先得11分的一方为胜方。10平后,先夺得2分的一方为胜方。
#include<cstdio>#include<iostream>#include<string>#include<algorithm>using namespace std;void print(string s,int score){int a=0,b=0;for(int i=0;i<s.size();i++){if(s[i]=='W') a++;if(s[i]=='L') b++;if(s[i]=='E'){cout<<a<<":"<<b<<endl;break;}if(max(a,b)>=score&&abs(a-b)>=2){cout<<a<<":"<<b<<endl;a=0,b=0;}}}int main(void){string s,a;while(cin>>a) s+=a;print(s,11);cout<<endl;print(s,21);return 0;}123456789101112131415161718192021222324252627282930313233
P2670 [NOIP2015 普及组] 扫雷游戏
#include<bits/stdc++.h>using namespace std;const int N=1e3+10;int n,m,st[N][N];string s[N];void solve(int x,int y){for(int i=x-1;i<=x+1;i++)for(int j=y-1;j<=y+1;j++)if(i>=0&&i<=n-1&&y>=0&&y<=m-1&&s[i][j]=='*') st[x][y]++;}int main(void){cin>>n>>m;for(int i=0;i<n;i++) cin>>s[i];for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(s[i][j]=='?') solve(i,j);for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(s[i][j]=='*') cout<<s[i][j];else cout<<st[i][j];}puts("");}return 0;}
P1563 [NOIP2016 提高组] 玩具谜题
using namespace std;struct node{int head;string name;}a[100005];int n,m,x,y;int main(){cin>>n>>m;for(int i=0;i<n;i++){cin>>a[i].head>>a[i].name;}int now=0;for(int i=1;i<=m;i++){cin>>x>>y;if(a[now].head==0&&x==0)now=(now+n-y)%n;else if(a[now].head==0&&x==1)now=(now+y)%n;else if(a[now].head==1&&x==0)now=(now+y)%n;else if(a[now].head==1&&x==1)now=(now+n-y)%n;}cout<<a[now].name<<endl;return 0;}
P1601 A+B Problem(高精)
#include<bits/stdc++.h>using namespace std;vector<int>A,B,C;string a,b;vector<int> add(vector<int> A,vector<int> B){int t=0;vector<int>c;for(int i=0;i<A.size()||i<B.size();i++){if(i<A.size()) t+=A[i];if(i<B.size()) t+=B[i];C.push_back(t%10);t/=10;}if(t) C.push_back(1);return C;}int main(void){cin>>a>>b;for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');C=add(A,B);for(int i=C.size()-1;i>=0;i--) cout<<C[i];return 0;}
array
#include <bits/stdc++.h>using namespace std;/*题目:P1601 A+B Problem(高精)URL :https://www.luogu.com.cn/problem/P1601*/#define maxn 510int a[maxn]={0},b[maxn]={0},c[maxn]={0};string A,B;int main(){cin >>A>>B;int len = max(A.length(),B.length()); //最长的长度for (int i = len,j=A.length()-1 ; j>=0 ; i--,j-- ){a[i] = A[j] -'0'; //j使用了长度,保证了不会越界}for (int i = len,j=B.length()-1 ; j>=0 ; i--,j-- ){b[i] = B[j] -'0'; //j使用了长度,保证了不会越界}for (int i = len ; i>=1 ; i--){c[i] += a[i]+b[i]; //注意这里存储了进位;c[i-1] = c[i]/10; //这个步骤很巧妙 的向前存储了进位c[i] %= 10 ; //保留各位}if (c[0]){cout <<c[0]; //如果进位有,则输出}for (int i = 1 ; i<=len ; i++){cout <<c[i];}return 0 ;}
