codeforces 792A-D
先刷前四题,剩下的有空补。
题意:给出x 轴上的n 个点,问两个点之间的最短距离是多少,有多少个最短距离。
思路:排序后遍历。
代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
#define N 200005
int w[N];
int main(){
int n;
while(~scanf("%d", &n)){
for(int i=; i<n; i++){
scanf("%d", &w[i]);
}
sort(w, w+n);
int mint=w[]-w[], co=;
for(int i=; i<n; i++){
if(w[i]-w[i-]<mint){
mint=w[i]-w[i-];
co=;
}
else if(w[i]-w[i-]==mint) co++;
}
printf("%d %d\n", mint, co);
}
return ;
}
792A AC代码
题意:1-n n个数围成一圈,初始位置为1,有m 个操作,每个操作给一个整数x,表示前进x 步后删去当前位置的数,再前进一步,输出每次操作删除的数
思路:模拟,用pos表示当前位置,循环m 次。注意得到x 后先取余当前剩余数量。
代码:
#include<stdio.h>
int main(){
int n, m, x;
while(~scanf("%d%d", &n, &m)){
bool vis[]={}, flag=false;
int pos=, num=n;
while(m--){
scanf("%d", &x);
x=x%num;
while(x--){
do
{
pos++;
pos%=n;
}while(vis[pos]==);
}
if(flag) printf(" ");
flag=true;
printf("%d", pos+);
vis[pos]=;
do
{
pos++;
pos%=n;
}while(vis[pos]==);
num--;
}
printf("\n");
}
return ;
}
792B AC代码
题意:给一个数,问最少删除多少位后可以被3 整除。
思路:
有一个大数取余要先理解。用sum 保存所有位和取余3 的结果。
如果sum==0,不需要删除;
如果sum==1,有可能删除一位1(取余后),有可能删除两位2;
如果sum==2,有可能删除一位2,有可能删除两位1。
写一个函数del(char *s, int k)表示从s 里删除一个数字k 并且去除前导0。接着几个if、else判断一下就可以了。
代码:
#include<stdio.h>
#include<string.h>
void del(char *s, int k){
int ls=strlen(s), i;
for(i=ls-; i>=; i--){
if((s[i]-'')%==k) break;
}
if(i==-) return ;
for(int j=i; j<ls; j++) s[j]=s[j+];
if(s[]==){
s[]='-';
s[]='';
s[]=;
return ;
}
for(i=; s[i]; i++){
if(s[i]!='') break;
}
if(s[i]==) s[]='', s[]=;
else{
for(int j=i; j<ls; j++){
s[j-i]=s[j];
}
}
}
char s[], ts[];
int main(){
while(~scanf("%s", s)){
int sum=;
for(int i=; s[i]; i++){
sum+=s[i]-'';
sum%=;
}
if(sum==) printf("%s\n", s);
else{
int n1=, n2=;
for(int i=; s[i]; i++){
if((s[i]-'')%==) n1++;
else if((s[i]-'')%==) n2++;
}
if(sum==){
if(n2<){
del(s, );
printf("%s\n", s);
}
else if(n1==){
del(s, );
del(s, );
printf("%s\n", s);
}
else{
strcpy(ts, s);
int ls1, ls2;
del(ts, );
ls1=strlen(ts);
del(s, );
del(s, );
ls2=strlen(s);
if(ls1>ls2) printf("%s\n", ts);
else printf("%s\n", s);
}
}
else{
if(n2==){
del(s, );
del(s, );
printf("%s\n", s);
}
else if(n1<){
del(s, );
printf("%s\n", s);
}
else{
strcpy(ts, s);
int ls1, ls2;
del(ts, );
del(ts, );
ls1=strlen(ts);
del(s, );
ls2=strlen(s);
if(ls1>ls2) printf("%s\n", ts);
else printf("%s\n", s);
}
}
}
}
return ;
}
792C AC代码
792D Paths in a Complete Binary Tree
题意:给一个n ,一个m ,n 表示有n 个结点的完整二叉树,m 表示m 个询问,每次询问给出初始结点编号和移动序列,问移动后的结点编号。(树结点编码依据中序遍历)
思路:
预处理+模拟。
可以先通过一个dfs找到初始位置的层数,这个dfs里面同时求出初始位置到根的路径(用于判断当前位置是父结点的左孩子或右孩子)。
接着根据初始位置的层数,先预处理一下移动序列,把不合理的操作去掉。(简化后续操作难度)
接着模拟当前位置变化即可。分三种情况处理即可(重点的子树结点数量可以通过当前层数求出)
代码:
#include<stdio.h>
#define LL long long int getNum(LL n){
int ret=;
while(n){
n>>=;
ret++;
}
return ret;
} int dfs(LL l, LL r, LL p, bool *ss, int &ssp, int ceng){ // 确定初始位置的行
LL mid=(l+r)/;
if(mid==p) return ceng;
else if(mid>p){
ss[ceng]=;
ssp=ceng;
return dfs(l, mid-, p, ss, ssp, ceng+);
}
else{
ss[ceng]=;
ssp=ceng;
return dfs(mid+, r, p, ss, ssp, ceng+);
}
} void init(char *s, int rp, int num){
int j=;
for(int i=; s[i]; i++){
if(s[i]=='L' || s[i]=='R'){
if(rp==num);
else{
rp++;
s[j++]=s[i];
}
}
else{
if(rp==);
else{
rp--;
s[j++]=s[i];
}
}
}
s[j]=;
} LL dp[];
LL solve(char *s, bool *ss, int ssp, LL p, int rp, int num){
if(s[]==) return p;
if(s[]=='L'){
LL ln=dp[num-rp]-;
p=p-ln+(ln-)/;
rp++;
ss[++ssp]=;
}
else if(s[]=='R'){
LL rn=dp[num-rp]-;
p=p++(rn-)/;
rp++;
ss[++ssp]=;
}
else{
if(ss[ssp]==){
LL rn=dp[num-rp]-;
p=p++rn;
}
else{
LL ln=dp[num-rp]-;
p=p--ln;
}
ssp--;
rp--;
} return solve(s+, ss, ssp, p, rp, num);
} char s[];
bool ss[];
int main(){
dp[]=;
for(int i=; dp[i-]<=1e18; i++){
dp[i]=dp[i-]*;
}
LL n, p;
int m;
while(~scanf("%I64d%d", &n, &m)){
int num = getNum(n);
while(m--){
scanf("%I64d%s", &p, s);
int ssp=;
int rp = dfs(, n, p, ss, ssp, );
init(s, rp, num); printf("%I64d\n", solve(s, ss, ssp, p, rp, num));
}
}
return ;
}
792D AC代码
codeforces 792A-D的更多相关文章
- 3.26-3.31【cf补题+其他】
计蒜客)翻硬币 //暴力匹配 #include<cstdio> #include<cstring> #define CLR(a, b) memset((a), (b), s ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
- CodeForces - 148D Bag of mice
http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...
随机推荐
- 《深入理解Java虚拟机》-----第4章 虚拟机性能监控与故障处理工具
理论总是作为指导实践的工具,能把这些知识应用到实际工作中才是 我们的最终目的. 给一个系统定位问题的时候,知识.经验是关键基础,数据是依据,工具是运用知识处理数据的手段.这里说的数据包括:运行日志.异 ...
- 【Android Studio安装部署系列】四十、Android Studio安装Statistic插件(统计项目总行数)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio 是没有提提供统计代码全部行数的功能的,但是对于开发者来说,这个功能确实必备的,Statistic统计代 ...
- 前后端同学,必会的Linux常用基础命令
无论是前端还是后端同学,一些常用的linux命令还是必须要掌握的.发布版本.查看日志等等都会用到.以下是我简单的总结了一些简单又常用的命令,欢迎大家补充.希望能帮助到大家 本文首发于公众号 程序员共成 ...
- 微信公众号开发C#系列-10、长链接转短链接
1.概述 短网址的好处众多,便于记忆,占用字符少等,现在市面上出现了众多的将长网址转变为短网址的方法,但是由于他们都是小的公司在幕后运营,所以很不靠谱,面对随时关闭服务的可能,这样也导致我们将转换好了 ...
- 使用SSL安全证书和nginx配置将域名HTTPS化
一.在阿里云后台申请免费版证书: 二.在域名解析里面添加记录: 三.提交审核: 四.等待审核通过后,下载nginx证书: 五.按照文档修改nginx配置文件: https://help.aliyun. ...
- .net后台防止API接口被重复请求
思路大概是这样的: 1.获取到发出请求的客户端的IP 2.将该IP存入Cache作为KEY,将次数作为Value初始化为0,过期时间设置为1分钟 3.每次请求都将value+1,超过指定的次数后返回f ...
- [转]Date and String Function in BluePrism
本文转自:https://www.codeproject.com/Articles/1247389/Date-and-String-Function-in-BluePrism This article ...
- java_异常
一.什么是异常? 1.当程序”运行后”,当jvm遇到一些无法处理的情况,例如:整数/0,这就表示jvm遇到一种”异常情况”. 通常jvm能够识别这些异常并在控制台打印异常信息,并结束程序 2.为了解决 ...
- SpringBoot 动态更新 resources 目录的文件
一.前言 SpringBoot 打成 Jar 包形式运行后 ,resources 目录下文件的读取修改和原来不太一样,网上比较多的是关于读取的方式,修改的几乎没有,终于在 stackoverflow ...
- (三) Keras Mnist分类程序以及改用交叉熵对比
视频学习来源 https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553 笔记 Mnist分 ...