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 510
int 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 ;
}