目录
- P1428 小鱼比可爱
- P1427 小鱼的数字游戏
- P5727 【深基5.例3】冰雹猜想
- P1047 [NOIP2005 普及组] 校门外的树
- P5728 【深基5.例5】旗鼓相当的对手
- P5729 【深基5.例7】工艺品制作
- P2550 [AHOI2001]彩票摇奖
- P2615 [NOIP2015 提高组] 神奇的幻方
- P5730 【深基5.例10】显示屏
- P1554 梦中的统计
- P2141 [NOIP2014 普及组] 珠心算测验
- P1614 爱与愁的心痛
- P2911 [USACO08OCT]Bovine Bones G
- P1161 开灯
- P5731 【深基5.习6】蛇形方阵
- P5732 【深基5.习7】杨辉三角
- P1789 【Mc生存】插火把
- P1319 压缩技术
- P1320 压缩技术(续集版)
- P1205 [USACO1.2]方块转换 Transformations
P1428 小鱼比可爱

https://www.luogu.com.cn/problem/P1428
#include<cstdio>
#include<iostream>
using namespace std;
int a[105],b[105];
int main(void)
{
int n; cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
b[0]=0;
for(int i=1;i<n;i++)
{
int cnt=0;
for(int j=0;j<i;j++)
if(a[i]>a[j]) cnt++;
b[i]=cnt;
}
for(int i=0;i<n;i++) cout<<b[i]<<" ";
return 0;
}
P1427 小鱼的数字游戏

https://www.luogu.com.cn/problem/P1427
#include<cstdio>
#include<iostream>
using namespace std;
int a[105];
int main(void)
{
int n=-1;
while(cin>>a[++n],a[n]);
for(int i=n-1;i>=0;i--) cout<<a[i]<<" ";
return 0;
}
P5727 【深基5.例3】冰雹猜想

https://www.luogu.com.cn/problem/P5727
#include<cstdio>
#include<iostream>
using namespace std;
int a[105];
int main(void)
{
int n; cin>>n;
int temp=n;
int num=0;
while(n!=1)
{
if(n%2==0)
{
n/=2;
a[num++]=n;
continue;
}
else
{
n=n*3+1;
a[num++]=n;
}
}
for(int i=num-1;i>=0;i--) cout<<a[i]<<" ";
cout<<temp;
return 0;
}
P1047 [NOIP2005 普及组] 校门外的树

https://www.luogu.com.cn/problem/P1047
注意树的下标是从0开始的,故共有(l+1)颗树
#include<cstdio>
#include<iostream>
#include<map>
#include<algorithm>
#include<vector>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
vector<PII> ve;
int l,m;
int main(void)
{
cin>>l>>m;
while(m--)
{
int a,b;
cin>>a>>b;
ve.push_back({a,b});
}
sort(ve.begin(),ve.end());
int ans=0;
int startx=ve[0].x,endx=ve[0].y;
for(int i=1;i<ve.size();i++)
{
if(ve[i].x>endx)
{
ans+=endx-startx+1;
startx=ve[i].x,endx=ve[i].y;
}
if(ve[i].y<=endx) continue;
else endx=ve[i].y;
}
ans+=endx-startx+1;
cout<<l-ans+1<<endl;
return 0;
}
P5728 【深基5.例5】旗鼓相当的对手

https://www.luogu.com.cn/problem/P5728
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
struct student
{
int a,b,c,sum;
}stu[1005];
bool judge(student a,student b)
{
if(abs(a.a-b.a)>5) return false;
if(abs(a.b-b.b)>5) return false;
if(abs(a.c-b.c)>5) return false;
if(abs(a.a+a.b+a.c-b.a-b.b-b.c)>10) return false;
return true;
}
int ans;
int main(void)
{
int n; cin>>n;
for(int i=0;i<n;i++) cin>>stu[i].a>>stu[i].b>>stu[i].c,stu[i].sum=stu[i].a+stu[i].b+stu[i].c;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(judge(stu[i],stu[j])) ans++;
cout<<ans<<endl;
return 0;
}
P5729 【深基5.例7】工艺品制作

https://www.luogu.com.cn/problem/P5729
#include<cstdio>
#include<iostream>
using namespace std;
bool a[25][25][25];
int main(void)
{
int w,x,h; cin>>w>>x>>h;
int q; cin>>q;
while(q--)
{
int x1,x2,y1,y2,z1,z2; cin>>x1>>y1>>z1>>x2>>y2>>z2;
for(int i=x1;i<=x2;i++)
for(int j=y1;j<=y2;j++)
for(int k=z1;k<=z2;k++)
a[i][j][k]=true;
}
int ans=0;
for(int i=1;i<=w;i++)
for(int j=1;j<=x;j++)
for(int k=1;k<=h;k++)
if(!a[i][j][k]) ans++;
cout<<ans<<endl;
return 0;
}
P2550 [AHOI2001]彩票摇奖

https://www.luogu.com.cn/problem/P2550
#include<cstdio>
#include<iostream>
using namespace std;
int n;
int ans[8];
int a[40];
bool hush[40];
int main(void)
{
cin>>n;
for(int i=0;i<7;i++) cin>>a[i],hush[a[i]]=true;
while(n--)
{
int number,temp=0;
for(int i=0;i<7;i++)
{
cin>>number;
if(hush[number] ) temp++;
}
ans[temp]++;
}
for(int i=7;i>=1;i--) cout<<ans[i]<<" ";
return 0;
}
P2615 [NOIP2015 提高组] 神奇的幻方

https://www.luogu.com.cn/problem/P2615
#include<cstdio>
#include<iostream>
using namespace std;
int a[50][50];
int main(void)
{
int n; cin>>n;
int ans=1;
a[1][n/2+1]=ans;
int startx=1,starty=n/2+1;
while(ans<=n*n)
{
ans++;
if(startx==1&&starty!=n)
{
startx=n,starty=starty+1,a[startx][starty]=ans;
continue;
}
if(starty==n&&startx!=1)
{
startx--,starty=1;
a[startx][starty]=ans;
continue;
}
if(startx==1&&starty==n)
{
startx++;
a[startx][starty]=ans;
continue;
}
if(!a[startx-1][starty+1]) startx--,starty++,a[startx][starty]=ans;
else startx++,a[startx][starty]=ans;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
P5730 【深基5.例10】显示屏

https://www.luogu.com.cn/problem/P5730
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
string a[10][5]={
{"XXX","X.X","X.X","X.X","XXX"},//0
{"..X","..X","..X","..X","..X"},//1
{"XXX","..X","XXX","X..","XXX"},//2
{"XXX","..X","XXX","..X","XXX"},//3
{"X.X","X.X","XXX","..X","..X"},//4
{"XXX","X..","XXX","..X","XXX"},//5
{"XXX","X..","XXX","X.X","XXX"},//6
{"XXX","..X","..X","..X","..X"},//7
{"XXX","X.X","XXX","X.X","XXX"},//8
{"XXX","X.X","XXX","..X","XXX"}//9
};
string ans[5];
int main(void)
{
int n; cin>>n;
string m; cin>>m;
for(int i=0;i<5;i++)
{
for(int j=0;j<n;j++)
{
int t=m[j]-'0';
ans[i]+=a[t][i];
if(j!=(n-1)) ans[i]+='.';
}
}
for(int i=0;i<5;i++) cout<<ans[i]<<endl;
return 0;
}
P1554 梦中的统计

https://www.luogu.com.cn/problem/P1554
#include<cstdio>
#include<iostream>
using namespace std;
int hush[10];
int main(void)
{
int m,n; cin>>m>>n;
for(int i=m;i<=n;i++)
{
int temp=i;
while(temp)
{
int t=temp%10;
hush[t]++;
temp/=10;
}
}
for(int i=0;i<=9;i++) cout<<hush[i]<<" ";
}
P2141 [NOIP2014 普及组] 珠心算测验

需要注意的一点是,如果一个数多次的拼出,只算一次
#include<cstdio>
#include<iostream>
using namespace std;
int a[105];
int ans;
bool hush[30000];
int main(void)
{
int n; cin>>n;
for(int i=0;i<n;i++) cin>>a[i],hush[a[i]]=true;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(hush[a[i]+a[j]]&&a[i]!=a[j]) ans++,hush[a[i]+a[j]]=false;//保证只算了一次
cout<<ans<<endl;
return 0;
}
P1614 爱与愁的心痛

https://www.luogu.com.cn/problem/P1614
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[10005];
int ans=99999;
int main(void)
{
int n,m; cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++)
{
int temp=0;
for(int j=i;(i+m-1)<n&&j<=(i+m-1);j++)
{
temp+=a[j];
}
if(temp!=0)ans=min(ans,temp);
}
if(m)cout<<ans<<endl;
else cout<<0<<endl;
return 0;
}
P2911 [USACO08OCT]Bovine Bones G

https://www.luogu.com.cn/problem/P2911
#include<cstdio>
#include<iostream>
using namespace std;
int hush[1000];
int ans=0;
int index=0;
int main(void)
{
int s1,s2,s3; cin>>s1>>s2>>s3;
for(int i=1;i<=s1;i++)
for(int j=1;j<=s2;j++)
for(int k=1;k<=s3;k++)
hush[i+j+k]++;
for(int i=1;i<=1000;i++)
if(ans<hush[i]) ans=hush[i],index=i;
cout<<index<<endl;
return 0;
}
P1161 开灯

https://www.luogu.com.cn/problem/P1161
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
const int N=2000005;
bool a[N]={false};
int main(void)
{
int n; cin>>n;
while(n--)
{
double m; int t; cin>>m>>t;
for(int i=1;i<=t;i++)
{
int temp=m*i;
a[temp]=!a[temp];
}
}
for(int i=1;i<=N;i++)
{
if(a[i])
{
cout<<i<<endl;
break;
}
}
return 0;
}
P5731 【深基5.习6】蛇形方阵

https://www.luogu.com.cn/problem/P5731
#include<cstdio>
#include<iostream>
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int a[10][10];
int ans=1;
int main(void)
{
int n; cin>>n;
int d=0;
a[0][0]=1;
int x=0,y=0;
while(ans<n*n)
{
x=x+dx[d],y=y+dy[d];
if(x<0||x>=n||y<0||y>=n||a[x][y]) //碰到边或者走过了,就转向
{
x=x-dx[d],y=y-dy[d];
d=(d+1)%4;
x=x+dx[d],y=y+dy[d];
}
a[x][y]=++ans;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%3d",a[i][j]);
cout<<endl;
}
return 0;
}
P5732 【深基5.习7】杨辉三角

https://www.luogu.com.cn/problem/P5732
#include<cstdio>
#include<iostream>
using namespace std;
int a[25][25];
int main(void)
{
int n; cin>>n;
a[1][1]=1;
for(int i=2;i<=n;i++)
for(int j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
P1789 【Mc生存】插火把

https://www.luogu.com.cn/problem/P1789
#include<cstdio>
#include<iostream>
using namespace std;
bool a[10005][10005];
bool b[10005][10005];
int n,m,k;
int ans;
int dx1[20]={0,-1,-1, 1,1, 0, 0,0,0,-2,-1,1,2};
int dy1[20]={0,-1, 1,-1,1,-2,-1,1,2, 0, 0,0,0};
int dx2[25]={-2,-2,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2};
int dy2[25]={-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1,2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2};
void f1(int x,int y)
{
a[x][y]=true;
for(int i=0;i<13;i++)
{
int tempx=x+dx1[i],tempy=y+dy1[i];
if(tempx>=1&&tempx<=n&&tempy>=1&&tempy<=n) a[tempx][tempy]=true;
}
}
void f2(int x,int y)
{
a[x][y]=true;
for(int i=0;i<25;i++)
{
int tempx=x+dx2[i],tempy=y+dy2[i];
if(tempx>=1&&tempx<=n&&tempy>=1&&tempy<=n) a[tempx][tempy]=true;
}
}
int main(void)
{
cin>>n>>m>>k;
while(m--)
{
int x,y; cin>>x>>y;
f1(x,y);
}
while(k--)
{
int x,y; cin>>x>>y;
f2(x,y);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(!a[i][j]) ans++;
cout<<ans<<endl;
return 0;
}
P1319 压缩技术

https://www.luogu.com.cn/problem/P1319
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
bool flag=false;
string s;
int main(void)
{
int n; cin>>n;
int a;
s+=" ";//让下标从1开始
while(cin>>a)
{
while(a--)
{
if(!flag) s+='0';
else s+='1';
}
flag=!flag;
}
for(int i=1;i<s.size();i++)
{
cout<<s[i];
if(i&&i%n==0) cout<<endl;
}
return 0;
}
P1320 压缩技术(续集版)

https://www.luogu.com.cn/problem/P1320
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
vector<string>ve;
int main(void)
{
string s;
while(cin>>s) ve.push_back(s);
cout<<ve.size()<<" ";
string ans;
for(int i=0;i<ve.size();i++) ans+=ve[i];
if(ans[0]!='0') cout<<0<<" ";//如果开头不是0 那么输出零
int cnt=1;
for(int i=1;i<ans.size();i++)
{
if(ans[i]!=ans[i-1])
{
cout<<cnt<<" ";
cnt=0;
}
cnt++;
}
cout<<cnt;
return 0;
}
P1205 [USACO1.2]方块转换 Transformations

https://www.luogu.com.cn/problem/P1205
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
char a[15][15];
char b[15][15];
char ans[15][15];
int n;
int m=0;
bool flag=false;
bool work1()//90
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
b[i][j]=a[n-1-j][i];
if(b[i][j]=='@'||ans[i][j]=='@')
if(b[i][j]!=ans[i][j]) return false;
}
}
return true;
}
bool work2()//180
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
b[i][j]=a[n-1-j][i];
}
}
char c[15][15];
memcpy(c,b,sizeof b);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
b[i][j]=c[n-1-j][i];
if(b[i][j]=='@'||ans[i][j]=='@')
if(b[i][j]!=ans[i][j]) return false;
}
}
return true;
}
bool work3()//270
{
for(int i=0;i<n;i++)//转一次
for(int j=0;j<n;j++)
b[i][j]=a[n-1-j][i];
char c[15][15];
memcpy(c,b,sizeof b);//转两次
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
b[i][j]=c[n-1-j][i];
memcpy(c,b,sizeof b);
for(int i=0;i<n;i++)//转三次
{
for(int j=0;j<n;j++)
{
b[i][j]=c[n-1-j][i];
if(b[i][j]=='@'||ans[i][j]=='@')
if(b[i][j]!=ans[i][j]) return false;
}
}
return true;
}
bool work4()
{
memcpy(b,a,sizeof a);
int temp=n/2;
for(int j=0;j<temp;j++)//左边
for(int i=0;i<n;i++)
b[i][j]=a[i][n-1-j];
for(int j=0;j<temp;j++)//右边
for(int i=0;i<n;i++)
b[i][n-1-j]=a[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(b[i][j]=='@'||ans[i][j]=='@')
if(b[i][j]!=ans[i][j]) return false;
return true;
}
bool work5()
{
memcpy(b,a,sizeof a);//水平
int temp=n/2;
for(int j=0;j<temp;j++)//左边
for(int i=0;i<n;i++)
b[i][j]=a[i][n-1-j];
for(int j=0;j<temp;j++)//右边
for(int i=0;i<n;i++)
b[i][n-1-j]=a[i][j];
memcpy(a,b,sizeof b);
if(work1()) return true;
if(work2()) return true;
if(work3()) return true;
return false;
}
bool work6()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(a[i][j]!=ans[i][j]) return false;
return true;
}
int main(void)
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>ans[i];
if(!flag) if(work1()) m=1,flag=true;
if(!flag) if(work2()) m=2,flag=true;
if(!flag) if(work3()) m=3,flag=true;
if(!flag) if(work4()) m=4,flag=true;
if(!flag) if(work5()) m=5,flag=true;
if(!flag) if(work6()) m=6,flag=true;
if(!flag) m=7,flag=true;
cout<<m<<endl;
return 0;
}
1万+

被折叠的 条评论
为什么被折叠?



