H国的身份证号码I HihoCoder - 1558

只要单纯的判断一下前后的乘积就好了, 因为不是很想处理倍数的关系, 所以我这里是用 string去处理。

代码:

 #include<bits/stdc++.h>
using namespace std;
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define max3(a,b,c) max(a,max(b,c))
const int INF = 0x3f3f3f3f;
const LL mod = 1e9+;
typedef pair<int,int> pll;
char str[];
int n, k;
bool add(){
for(int i = n - ; i >= ; i--){
if((str[i-]-'')*(str[i]-''+) <= k && str[i]-''+ <= k) {str[i] = str[i] + ;return true;}
else str[i] = '';
}
if(str[]-''+ <= k) {str[] = str[]+; return true;}
return false;
}
int main(){
scanf("%d%d",&n,&k);
str[] = '';
for(int i = ; i < n; i++) str[i] = '';
str[n] = '\0';
while(){
printf("%s\n", str);
if(!add()) break;
}
return ;
}

偶像的条件 HihoCoder - 1514

求最小的D,D=|Ai-Bj|+|Bj-Ck|+|Ck-Ai|

假设A > B > C , D = 2(A - C)。 假设 A > C > B , D = 2(A - B)。

我们可以发现 D 就等于最大的那个数减去最小的那个数 再乘以2, 所以我们直接去对A,B,C的大小关系进行全排列, 然后对于每个a[i], 找到大于等于a[j],且最小的b[j], 再找到大于等于b[j]的最小的c[k], 求出每一个成立的 (c[k]-a[i])并取其中最小的那个就好了。

代码:

 #include<bits/stdc++.h>
using namespace std;
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define max3(a,b,c) max(a,max(b,c))
const int INF = 0x3f3f3f3f;
const LL mod = 1e9+;
typedef pair<int,int> pll;
const int N = ;
int A[N], B[N], C[N];
int ans = 1e9;
void solve(int a[], int n, int b[], int m, int c[], int l){
for(int i = ; i <= n; i++){
int p1 = lower_bound(b+,b++m,a[i]) - b;
if(p1 == m+) return;
int p2 = lower_bound(c+,c++l,b[p1]) - c;
if(p2 == l+) return;
ans = min(ans, *(c[p2]-a[i]));
}
}
int main(){
int n, m, l;
scanf("%d%d%d",&n,&m,&l);
for(int i = ; i <= n; i++)
scanf("%d",&A[i]);
for(int i = ; i <= m; i++)
scanf("%d",&B[i]);
for(int i = ; i <= l; i++)
scanf("%d",&C[i]);
sort(A+, A++n);
A[n+] = 1e9;
sort(B+, B++m);
B[m+] = 1e9;
sort(C+, C++l);
C[l+] = 1e9;
solve(A,n,B,m,C,l);
solve(A,n,C,l,B,m);
solve(B,m,A,n,C,l);
solve(B,m,C,l,A,n);
solve(C,l,A,n,B,m);
solve(C,l,B,m,A,n);
printf("%d", ans);
return ;
}

数组去重 HihoCoder - 1376

代码:

 #include<bits/stdc++.h>
using namespace std;
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define max3(a,b,c) max(a,max(b,c))
const int INF = 0x3f3f3f3f;
const LL mod = 1e9+;
typedef pair<int,int> pll; int main(){
int n, last, t;
while(~scanf("%d",&n), n != -){
for(int i = ; i <= n; i++){
scanf("%d", &t);
if(i == ){printf("%d",t); last = t;}
if(last != t){
printf(" %d", t);
last = t;
}
}
printf("\n");
}
return ;
}

分数调查 HihoCoder - 1515

求的是查询的时候输出X同学与Y同学之间的分数差距(不清楚输出-1),莫非用最短路跑出所有点之间的距离? N = 1e5。 就算不T数组也开不下。

后来发现可以跑出2个人之间的关系,并且建立能联通的人之间的相对关系就好了, 将第一个人的分数设为0, 然后通过边的关系处理出别人的分数。

然后每次询问的时候,判断X与Y是不是同一次访问的,如果是输出分数差,如果不是就输出-1。

代码:

 #include<bits/stdc++.h>
using namespace std;
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define max3(a,b,c) max(a,max(b,c))
const int INF = 0x3f3f3f3f;
const LL mod = 1e9+;
typedef pair<int,int> pll;
const int N = ;
int vis[N], val[N], head[N];
struct Node{
int to;
int ct;
int nt;
}e[N<<];
int tot = ;
void add(int u, int v, int w){
e[tot].to = v;
e[tot].ct = w;
e[tot].nt = head[u];
head[u] = tot++;
}
void dfs(int u, int cnt){
vis[u] = cnt;
for(int i = head[u]; ~i; i = e[i].nt){
if(!vis[e[i].to]){
val[e[i].to] = val[u]-e[i].ct;
dfs(e[i].to,cnt);
}
}
}
int main(){
memset(head, -, sizeof(head));
int n, m, q;
int u, v, w;
scanf("%d%d%d", &n, &m, &q);
for(int i = ; i <= m; i++){
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,-w);
}
int cnt = ;
for(int i = ; i <= n; i++){
if(!vis[i]){
val[i] = ;
dfs(i,cnt++);
}
}
for(int i = ; i <= q; i++){
scanf("%d%d",&u,&v);
if(vis[u] != vis[v]) printf("-1\n");
else printf("%d\n",val[u]-val[v]);
}
return ;
}

CQ18阶梯赛第二场的更多相关文章

  1. 【CQ18阶梯赛第二场】题解

    [A-H国的身份证号码I] 用N个for语句可以搞定,但是写起来不方便,所以搜索. dfs(w,num,p)表示搜索完前w位,前面x组成的数位num,最后以为为p. 如果搜索到第N位,则表示num满足 ...

  2. 【CQ18阶梯赛第一场】题解

    [A-风格不统一如何写程序] 输入字符串,得到长度,对于每个字符:如果是大写,则改为:‘_’+小写:如果是‘_’则忽略‘_’,并且把后面的小写改为大写. #include<cstdio> ...

  3. Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)

    Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...

  4. NOI.AC NOIP模拟赛 第二场 补记

    NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...

  5. 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)

    以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...

  6. 【CQ18阶梯赛第8场】题解

    [A:HDU2032 杨辉三角]: 简单的递推,或者是基础的DP: 但是只有杨润东一个人1A,整体准确率只有8/37,具体原因不详. 经验:提交前一定要试一下比较特殊的数据或者最大的数据.其次,为了保 ...

  7. SCNU省选校赛第二场B题题解

    今晚的校赛又告一段落啦,终于"开斋"了! AC了两题,还算是满意的,英语还是硬伤. 来看题目吧! B. Array time limit per test 2 seconds me ...

  8. 2019.10.24 CSP%你赛第二场d1t3

    题目描述 Description 精灵心目中亘古永恒的能量核心崩溃的那一刻,Bzeroth 大陆的每个精灵都明白,他们的家园已经到了最后的时刻.就在这危难关头,诸神天降神谕,传下最终兵器——潘少拉魔盒 ...

  9. 暑假集训单切赛第二场 UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(字符串处理)

    一开始不懂啊,什么Home键,什么End键,还以为相当于括号,[]里的东西先打印出来呢.后来果断百度了一下. 悲催啊... 题意:给定一个字符串,内部含有'['和']'光标转移指令,'['代表光标移向 ...

随机推荐

  1. TCP重置报文段及RST常见场景分析

    RST表示连接重置,用于关闭那些已经没有必要继续存在的连接.一般情况下表示异常关闭连接,区别与四次分手正常关闭连接. 产生RST的三个条件是: 目的地为某端口的SYN到达,然而在该端口上并没有正在监听 ...

  2. oracle的开窗函数

    原创 select * from (select province, commodity, sum(price), ROW_NUMBER() OVER(PARTITION BY province  o ...

  3. 自定义SWT控件二之自定义多选下拉框

    2.自定义下拉多选框 package com.view.control.select; import java.util.ArrayList; import java.util.HashMap; im ...

  4. 旁友数独会伐啦?python秒解数独了解下伐啦?

    前几天和隔壁邻居玩斗地主被发现了,牌被没收了,斗地主是斗不了了,但我还想和邻居玩耍.如果你还想斗斗地主,戳:趁老王不在,和隔壁邻居斗斗地主,比比大小 想破脑袋终于让我想到一个游戏,数独!什么叫数独?数 ...

  5. python多线程与多进程及其区别

    个人一直觉得对学习任何知识而言,概念是相当重要的.掌握了概念和原理,细节可以留给实践去推敲.掌握的关键在于理解,通过具体的实例和实际操作来感性的体会概念和原理可以起到很好的效果.本文通过一些具体的例子 ...

  6. JS 中构造函数和普通函数的区别

    原来只是随意的了解了下 , 但是最近有点忘了 于是详细了解下 加深下印象. 1.构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写 2.构造函数和普通函数的区别在于:调用方式 ...

  7. .xxx.sh脚本无法启动,原来都是特殊字符搞的鬼?

    今天遇到个趣的问题,linux上springboot启动,连接达梦数据库报错. 解决思路: 1)是不是数据库本身有问题,客户端登录没问题. 2)排查是不是war包问题,本地连接数据库,没问题. 3)是 ...

  8. Java中只有值传递,(及值传递与引用传递详解)

    首先呢,我们来说一下值传递与引用传递的区别(这两个玩意儿实在调用函数的时候提到的) 比如说 code( a) code( int a ) code(a)是调用函数,a是我们原本函数的一个值类型,然后使 ...

  9. Tunnel Warfare HDU - 1540 (线段树不同子树的合并)

    在抗日战争期间,华北平原广大地区进行了大规模的隧道战. 一般来说,通过隧道连接的村庄排成一列. 除了两端,每个村庄都与两个相邻的村庄直接相连. 入侵者经常对一些村庄发动袭击并摧毁其中的部分隧道. 八路 ...

  10. .Net Core 最优 MD5 打开方式!初学者建议收藏(支持 SHA1,SHA256,.Net Framework)

    public static string GetMd5Hash(string input) { using (MD5 md5Hash = MD5.Create()) { // Convert the ...