1.10凉心的比赛
Posted yishuda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.10凉心的比赛相关的知识,希望对你有一定的参考价值。
A - 最小的二进制数
题意:
给一个长度为n 只包含0、1的字符串。你可以有两种操作:
- 任意交换字符串中两个相邻的字符;
- 如果两个相邻的字符都是1,那么就可以用一个1 代替11 。比如 11 => 1;
让你输出经过多次操作后 最小的正确字符串。
思路:
如果字符串中有多个1,我们经过多次操作只留下一个 1 ,这样的字符串就是正确答案。
所以统计字符串中 1 的个数,然后输出一个 1 ,接着把字符串中所有的0输出即可。
当n=1 的时候特殊注意一下就可以了。
AC代码:
#include <iostream> #include <cstring> using namespace std; int n,ans; int main(){ char s[110]; cin>>n; for (int i=1; i<=n; i++) { cin>>s[i]; if (s[i]==‘1‘) ans++; } if (n==1) cout<<s[1]<<endl; else{ cout<<‘1‘; for (int i=1; i<=n-ans; i++) cout<<‘0‘; cout<<endl; } }
B - 线段的包含关系
题意:
给出 n个线段,问其中是不是有线段存在包含关系。输出被包含 和 包含 线段的位置(根据输入顺序确定的位置)。
思路:
我们用结构体来存储线段的位置,以及左右端点。然后对其排序。 排序规则为:先将线段的左端点从小到大排序,
如果左端点相等,那么就以右端点从大到小排序。排序结束后,我们遍历一边数组就可以得到答案啦。
因为线段左端点都是递增的,所以我们在比较包含关系的时候只需要比较右端点 存在包含关系就可以啦。
AC代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> const int maxn=3e5+100; using namespace std; struct node { int l,r,de; };//存储线段的结构体 bool cmp(node a,node b){ return a.l==b.l?a.r>b.r:a.l<b.l; }//自定义排序方式函数,在sort里面使用 int n; node a[maxn]; int main(){ scanf("%d",&n); for (int i=1; i<=n; i++) { scanf("%d%d",&a[i].l,&a[i].r); a[i].de=i; } sort(a+1, a+1+n, cmp); for (int i=2; i<=n; i++) { if(a[i].r<=a[i-1].r){//后一个的右端点与前一个存在包含关系即线段存在包含关系 printf("%d %d ",a[i].de,a[i-1].de); return 0; } } printf("-1 -1 "); }
C - 地下城还有劳拉
题意:
给一个二维地图,规定行走路线,问走第n步时候的坐标点。
思路:
我们要注意他的走路方式,先走左一列,然后从左往右走最后一行,接着从右往左走倒数第二行,因为他保证一定是在(1,2)处结束。
所以我们可以知道奇数行都是从右往左走,偶数行都是从左往右走。 所以特判走第一列,然后剩下走的行数模拟一下就行啦,这里要注意一下求余为0的情况。
AC代码:
#include <iostream> #include <cstdio> #include <cstring> typedef long long ll; using namespace std; ll n,m,k; int main(){ cin>>n>>m>>k; if (k<=n-1) cout<<k+1<<‘ ‘<<1<<endl;//特判第一列 else{ //蛇形走位模拟 k-=(n-1); //k为走完行数剩余的步数 ll l,r; // l、r分别为最终坐标点(l,r)。 if (k%(m-1)==0) l=n-k/(m-1)+1; else l=n-k/(m-1); //定位行数 if (l%2)//定位列数 { if (k%(m-1)) r=m-k%(m-1)+1; else r=2; } else { if (k%(m-1)) r=k%(m-1)+1; else r=m; } cout<<l<<" "<<r<<endl; } }
D - 心火牧日常计算
代补
E - 法法在分配工作
题目:
合理在n个人中分配出领导人,规定每个领导人都有相同的员工。
思路:
签到题,暴力找一下就可以啦。
AC代码:
#include <iostream> #include <cstdio> using namespace std; int n,ans; int main(){ cin>>n; for (int i=1; i<=n/2; i++) { if (n%i==0) ans++; } cout<<ans<<endl; }
F - 法法要穿过大门
题意:
在坐标系第一象限,每一个整数位坐标点都是一个城门,规定y=x 这条直线将第一象限划分为两个国家,每次从一个国家到另一个国家都要收费,
给出fafa穿越城门的记录U为上行,R为右行,计算出fafa需要缴纳的费用。
思路:
记录U,R的次数,每当U的次数超过R的次数,或者R的次数超过U的次数时 都要交钱--给钱给钱,快给钱。
AC代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; int n,ans; int r,u; string s; int main(){ cin>>n>>s; if (s[0]==‘U‘) u++; else r++; for (int i=1; i<n; i++) { int t=0; if (r==u) t=1; if (s[i]==‘R‘) r++; else u++; if (abs(r-u)==1&&s[i]==s[i-1]&&t==1) ans++; //过门,给钱,快给钱 } cout<<ans<<endl; }
G - 法法非法是朋友
滋滋滋
H - 法法和古代字母
嘶嘶嘶
I - 法法和古代数学
嘟嘟嘟
以上是关于1.10凉心的比赛的主要内容,如果未能解决你的问题,请参考以下文章
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。 已抽签决定比赛名单。有人向队员打听比赛的名单。 a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。(代码片段