第一章 入门
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1111111;
int f[maxn];
int main()
{
int x,y;
int ans,ret;
memset(f,0,sizeof(f));
while (~scanf("%d%d",&x,&y))
{
ans=0;
for (int i=min(x,y);i<=max(x,y);i++)
{
if (f[i]) ret=f[i];
else
{
ret=1;
int n=i;
while (n!=1)
{
if (n&1) n=3*n+1;
else n/=2;
ret++;
}
f[i]=ret;
}
if (ret>ans) ans=ret;
}
printf("%d %d %d\n",x,y,ans);
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int direct[8][2]={ {1,0},{-1,0},{0,1},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1} };
char s[111][111];
int f[111][111];
int n,m;
bool check(int x,int y)
{
if (x>=1&&x<=n&&y>=1&&y<=m) return true;
return false;
}
int main()
{
int cnt=0;
while (~scanf("%d%d",&n,&m))
{
if (n==0&&m==0) break;
memset(f,0,sizeof(f));
for (int i=1;i<=n;i++)
{
scanf("%s",s[i]+1);
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if (s[i][j]=='*')
{
for (int k=0;k<8;k++)
{
int x=i+direct[k][0];
int y=j+direct[k][1];
if (check(x,y)) f[x][y]++;
}
}
}
}
if (cnt>0) puts("");
printf("Field #%d:\n",++cnt);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if (s[i][j]=='*') printf("*");
else printf("%d",f[i][j]);
}
printf("\n");
}
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=111111;
double a[maxn];
int main()
{
int n;
double sum,avg,ans1,ans2;
while (~scanf("%d",&n))
{
if (n==0) break;
sum=0;
for (int i=0;i<n;i++)
{
scanf("%lf",&a[i]);
sum+=a[i];
}
avg=sum/n;
ans1=0;
ans2=0;
for (int i=0;i<n;i++)
{
if (a[i]<avg) ans1+=double(int((avg-a[i])*100))/100.0;
if (avg<a[i]) ans2+=double(int((a[i]-avg)*100))/100.0;
}
printf("$%0.2f\n",max(ans1,ans2));
}
return 0;
}
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int direct[4][2]={ {0,1},{1,0},{0,-1},{-1,0} };
char map[333][333];
int n,m;
void set(char c)
{
for (int i=1; i<=n; i++)
{
for (int j=1; j<=m; j++)
{
map[i][j]=c;
}
}
}
void print(int x1,int y1,int x2,int y2,char c)
{
for (int i=y1;i<=y2&&i<=n;i++)
{
for (int j=x1;j<=x2&&j<=m;j++)
{
map[i][j]=c;
}
}
}
struct POINT{
int x;
int y;
};
int main()
{
char c,chr;
int x,y;
int x1,x2,y1,y2;
char name[333];
while (cin>>c)
{
if (c=='X') break;
else if (c=='I')
{
cin>>m>>n;
set('O');
}
else if (c=='C')
{
set('O');
}
else if (c=='L')
{
cin>>x>>y>>chr;
map[y][x]=chr;
}
else if (c=='V')
{
cin>>x>>y1>>y2>>chr;
if (y1>y2) swap(y1,y2);
print(x,y1,x,y2,chr);
}
else if (c=='H')
{
cin>>x1>>x2>>y>>chr;
if (x1>x2) swap(x1,x2);
print(x1,y,x2,y,chr);
}
else if (c=='K')
{
cin>>x1>>y1>>x2>>y2>>chr;
if (x1>x2) swap(x1,x2);
if (y1>y2) swap(y1,y2);
print(x1,y1,x2,y2,chr);
}
else if (c=='F')
{
cin>>x>>y>>chr;
queue<POINT>que;
while (!que.empty()) que.pop();
POINT p;
p.x=y;
p.y=x;
char tel=map[p.x][p.y];
if (tel==chr) continue;
que.push(p);
map[p.x][p.y]=chr;
while (!que.empty())
{
POINT tmp=que.front();
que.pop();
for (int i=0;i<4;i++)
{
p.x=tmp.x+direct[i][0];
p.y=tmp.y+direct[i][1];
if (p.x>=1&&p.x<=n&&p.y>=1&&p.y<=m&&map[p.x][p.y]==tel)
{
map[p.x][p.y]=chr;
que.push(p);
}
}
}
}
else if (c=='S')
{
cin>>name;
cout<<name<<endl;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
cout<<map[i][j];
}
cout<<endl;
}
}
else
{
continue;
}
}
return 0;
}
第二章 数据结构
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=3333;
bool v[maxn];
int a[maxn];
int n;
int sum;
int main()
{
while (cin>>n)
{
sum=0;
memset(v,0,sizeof(v));
for (int i=1;i<=n;i++) cin>>a[i];
for (int i=2;i<=n;i++)
{
int t=abs(a[i]-a[i-1]);
if (!v[t]&&t>=1&&t<=n-1)
{
v[t]=true;
sum++;
}
}
if (sum==n-1) puts("Jolly");
else puts("Not jolly");
}
return 0;
}
第三章 字符串
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <ctype.h>
using namespace std;
const int direct[8][2]= { {0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1} };
char map[55][55];
int n,m;
bool v[55][55];
char s[55];
int len;
bool check(int x,int y)
{
if (x>=1&&x<=n&&y>=1&&y<=m) return true;
return false;
}
bool dfs(int x,int y,int deep,int g)
{
if (deep>=len) return true;
if (!check(x,y)) return false;
if (map[x][y]!=s[deep]) return false;
int dx=x+direct[g][0];
int dy=y+direct[g][1];
if (dfs(dx,dy,deep+1,g)) return true;
return false;
}
int main()
{
int T,k;
cin>>T;
while (T--)
{
cin>>n>>m;
for (int i=1; i<=n; i++) cin>>(map[i]+1);
for (int i=1; i<=n; i++) for (int j=1; j<=m; j++)
if (islower(map[i][j])) map[i][j]=toupper(map[i][j]);
cin>>k;
//for (int i=1; i<=n; i++) cerr<<(map[i]+1)<<endl;
while (k--)
{
int i,j,g;
bool ok=false;
cin>>s;
len=strlen(s);
for (i=0; i<len; i++)
if (islower(s[i])) s[i]=toupper(s[i]);
//cerr<<s<<endl;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
for (g=0; g<8; g++)
{
if (dfs(i,j,0,g))
{
ok=true;
cout<<i<<" "<<j<<endl;
break;
}
}
if (ok) break;
}
if (ok) break;
}
}
if (T) cout<<endl;
}
return 0;
}
10188 - Automated Judge Script
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
using namespace std;
vector<string>ac,sub;
int n,m;
bool accepted()
{
for (int i=0;i<n;i++)
{
if (ac[i]!=sub[i]) return false;
}
return true;
}
bool PE()
{
string num;
string ans;
num.clear();
ans.clear();
for (int i=0;i<n;i++)
{
for (int j=0;j<ac[i].size();j++)
{
if (isdigit(ac[i][j])) num+=ac[i][j];
}
}
for (int i=0;i<m;i++)
{
for (int j=0;j<sub[i].size();j++)
{
if (isdigit(sub[i][j])) ans+=sub[i][j];
}
}
if (ans==num) return true;
/*
cerr<<"---"<<ans<<"---"<<num<<"---";
if(ans==num) cerr<<"same"<<endl;
else cerr<<"not"<<endl;
*/
return false;
}
int main()
{
string s;
int cnt=0;
while (cin>>n)
{
if (n==0) break;
ac.clear();
sub.clear();
getchar();
for (int i=0;i<n;i++)
{
getline(cin,s);
ac.push_back(s);
}
cin>>m;
getchar();
for (int i=0;i<m;i++)
{
getline(cin,s);
sub.push_back(s);
}
if (n==m&&accepted())
{
cout<<"Run #"<<++cnt<<": Accepted"<<endl;
}
else if (PE())
{
cout<<"Run #"<<++cnt<<": Presentation Error"<<endl;
}
else
{
cout<<"Run #"<<++cnt<<": Wrong Answer"<<endl;
}
}
return 0;
}
第四章 排序
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[555];
int n;
int main()
{
int T;
int ans;
cin>>T;
while (T--)
{
cin>>n;
ans=0;
for (int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
int m=n/2+1;
for (int i=1;i<=n;i++) ans+=abs(a[i]-a[m]);
cout<<ans<<endl;
}
return 0;
}
第五章 算数与代数
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[111];
int b[111];
char sa[111];
char sb[111];
int lena,lenb;
int main()
{
while (cin>>sa>>sb)
{
if (strcmp(sa,sb)==0&&strcmp(sa,"0")==0) break;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
lena=strlen(sa);
lenb=strlen(sb);
for (int i=0;i<lena;i++) a[i]=sa[lena-i-1]-'0';
for (int i=0;i<lenb;i++) b[i]=sb[lenb-i-1]-'0';
int ans=0;
for (int i=0;i<max(lena,lenb);i++)
{
a[i]+=b[i];
if (a[i]>=10)
{
a[i+1]+=1;
a[i]-=10;
ans++;
}
}
if (ans==1) cout<<ans<<" carry operation."<<endl;
else if (ans>1) cout<<ans<<" carry operations."<<endl;
else cout<<"No carry operation."<<endl;
}
return 0;
}
第六章 组合数学
第七章 数论
第八章 回溯法
第九章 图遍历
第十章 图算法
第十一章 动态规划
第十二章 网络
第十三章 几何
第十四章 计算几何