https://www.luogu.com.cn/training/106#problems

P1042 [NOIP2003 普及组] 乒乓球

乒乓球运动比赛规则11分制: 在一局比赛中,先得11分的一方为胜方。10平后,先夺得2分的一方为胜方。

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<string>
  4. #include<algorithm>
  5. using namespace std;
  6. void print(string s,int score)
  7. {
  8. int a=0,b=0;
  9. for(int i=0;i<s.size();i++)
  10. {
  11. if(s[i]=='W') a++;
  12. if(s[i]=='L') b++;
  13. if(s[i]=='E')
  14. {
  15. cout<<a<<":"<<b<<endl;
  16. break;
  17. }
  18. if(max(a,b)>=score&&abs(a-b)>=2)
  19. {
  20. cout<<a<<":"<<b<<endl;
  21. a=0,b=0;
  22. }
  23. }
  24. }
  25. int main(void)
  26. {
  27. string s,a;
  28. while(cin>>a) s+=a;
  29. print(s,11);
  30. cout<<endl;
  31. print(s,21);
  32. return 0;
  33. }
  34. 123456789101112131415161718192021222324252627282930313233

P2670 [NOIP2015 普及组] 扫雷游戏

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e3+10;
  4. int n,m,st[N][N];
  5. string s[N];
  6. void solve(int x,int y)
  7. {
  8. for(int i=x-1;i<=x+1;i++)
  9. for(int j=y-1;j<=y+1;j++)
  10. if(i>=0&&i<=n-1&&y>=0&&y<=m-1&&s[i][j]=='*') st[x][y]++;
  11. }
  12. int main(void)
  13. {
  14. cin>>n>>m;
  15. for(int i=0;i<n;i++) cin>>s[i];
  16. for(int i=0;i<n;i++)
  17. for(int j=0;j<m;j++)
  18. if(s[i][j]=='?') solve(i,j);
  19. for(int i=0;i<n;i++)
  20. {
  21. for(int j=0;j<m;j++)
  22. {
  23. if(s[i][j]=='*') cout<<s[i][j];
  24. else cout<<st[i][j];
  25. }
  26. puts("");
  27. }
  28. return 0;
  29. }

P1563 [NOIP2016 提高组] 玩具谜题

  1. using namespace std;
  2. struct node
  3. {
  4. int head;
  5. string name;
  6. }a[100005];
  7. int n,m,x,y;
  8. int main()
  9. {
  10. cin>>n>>m;
  11. for(int i=0;i<n;i++)
  12. {
  13. cin>>a[i].head>>a[i].name;
  14. }
  15. int now=0;
  16. for(int i=1;i<=m;i++)
  17. {
  18. cin>>x>>y;
  19. if(a[now].head==0&&x==0)now=(now+n-y)%n;
  20. else if(a[now].head==0&&x==1)now=(now+y)%n;
  21. else if(a[now].head==1&&x==0)now=(now+y)%n;
  22. else if(a[now].head==1&&x==1)now=(now+n-y)%n;
  23. }
  24. cout<<a[now].name<<endl;
  25. return 0;
  26. }

P1601 A+B Problem(高精)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. vector<int>A,B,C;
  4. string a,b;
  5. vector<int> add(vector<int> A,vector<int> B)
  6. {
  7. int t=0;
  8. vector<int>c;
  9. for(int i=0;i<A.size()||i<B.size();i++)
  10. {
  11. if(i<A.size()) t+=A[i];
  12. if(i<B.size()) t+=B[i];
  13. C.push_back(t%10);
  14. t/=10;
  15. }
  16. if(t) C.push_back(1);
  17. return C;
  18. }
  19. int main(void)
  20. {
  21. cin>>a>>b;
  22. for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
  23. for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
  24. C=add(A,B);
  25. for(int i=C.size()-1;i>=0;i--) cout<<C[i];
  26. return 0;
  27. }

array

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. /*
  4. 题目:P1601 A+B Problem(高精)
  5. URL :https://www.luogu.com.cn/problem/P1601
  6. */
  7. #define maxn 510
  8. int a[maxn]={0},b[maxn]={0},c[maxn]={0};
  9. string A,B;
  10. int main()
  11. {
  12. cin >>A>>B;
  13. int len = max(A.length(),B.length()); //最长的长度
  14. for (int i = len,j=A.length()-1 ; j>=0 ; i--,j-- ){
  15. a[i] = A[j] -'0'; //j使用了长度,保证了不会越界
  16. }
  17. for (int i = len,j=B.length()-1 ; j>=0 ; i--,j-- ){
  18. b[i] = B[j] -'0'; //j使用了长度,保证了不会越界
  19. }
  20. for (int i = len ; i>=1 ; i--){
  21. c[i] += a[i]+b[i]; //注意这里存储了进位;
  22. c[i-1] = c[i]/10; //这个步骤很巧妙 的向前存储了进位
  23. c[i] %= 10 ; //保留各位
  24. }
  25. if (c[0]){
  26. cout <<c[0]; //如果进位有,则输出
  27. }
  28. for (int i = 1 ; i<=len ; i++){
  29. cout <<c[i];
  30. }
  31. return 0 ;
  32. }