Mutual Training for Wannafly Union #2
codeforces 298A. Snow Footprints
分类讨论三种情况:
①..RRRRRR…
②..LLLLLLL…
③..RRRLLLL..
//AC by lwq:
#include<stdio.h>
#include<algorithm>
#include<string>
#include<string.h>
using namespace std; int main()
{
int n;
scanf("%d",&n);
char ss[];
scanf("%s",ss);
int len=strlen(ss);
int i;
int begin,end;
for(i=;i<len;i++)
{
if(ss[i]=='.')
continue;
else if(ss[i]=='R')
{
begin=i;
break;
}
else if(ss[i]=='L')
{
end=i;
break;
}
}
if(ss[begin]=='R')
{
for(i=begin+;i<len;i++)
{
if(ss[i]=='.')
{
end=i;
break;
}
else if(ss[i]=='L')
{
end=i-;
break;
}
else
continue;
}
printf("%d %d",begin+,end+);
}
else if(ss[begin]=='L')
{
for(i=len-;i>=;i--)
{
if(ss[i]=='L')
{
begin=i;
break;
}
else
{
continue;
}
}
printf("%d %d",begin+,end);
}
return ;
}
模拟。水题。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char q[];
int main()
{
int t,sx,sy,ex,ey;
scanf("%d %d %d %d %d",&t,&sx,&sy,&ex,&ey);
scanf("%s",q);
int ans=;
bool f=false;
for(int i=;i<t;i++)
{
ans++;
if(q[i]=='E')
{
if(sx<ex)
sx++;
}
else if(q[i]=='S')
{
if(sy>ey)
sy--;
}
else if(q[i]=='W')
{
if(sx>ex)
sx--;
}
else if(q[i]=='N')
{
if(sy<ey)
sy++;
}
if(sx==ex&&sy==ey)
{
f=true;
break;
}
}
if(f)
printf("%d\n",ans);
else
printf("-1\n");
return ;
}
codeforces 382C. Arithmetic Progression
分类讨论:
先考虑特例:n = 1时,有无数组解,答案为 -1
然后根据存在的公差d的数量进行分类:
①d只有一种:
1.若d1 = 0,答案只有一种,输出a[1]
2.若d1为偶数并且只有两个数(n=2),则答案有三种:a[1] - d1, a[1]+d1/2, a[n] + d1 , 例如:2 4 -> 0 3 6
3.其他情况:答案有两种:a[1] – d1, a[n] + d1,例如:1 4 7 –> –2 10
②d有两种:d1, d2(设d2 > d1)
1.若d2 = 2 * d1 并且 cnt(d2) = 1(d2的数量只有一个),则答案只有一种:
根据d1, d2的顺序再分两小类:
(1)a[k]-d1(k为出现第二种公差的位置),例如:1 3 5 9 –> 7
(2)a[k-1]-d1,例如:-1 1 2 3 –> 0
2.其他情况:无解,答案为0
③d有三种以上:无解,答案为0
//AC by lyy:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<cmath>
#include<queue>
#include<limits.h>
#define CLR(a,b) memset((a),(b),sizeof((a)))
using namespace std;
typedef long long ll;
const int mod = 1e9+;
const int N = 1e5+;
const int inf = 0x3f3f3f3f; int n;
ll a[N]; int main() {
int i, j;
ll d1 , d2; ll k; scanf("%d", &n);
for(i = ; i <= n; ++i) {
scanf("%lld", &a[i]);
}
sort(a+, a++n);
int t;
if(n == ) {printf("-1\n"); return ;} int cnt1 = , cnt2 = ;//d1,d2数量 d1 = d2 = a[] - a[];
int f = ;//只有d1 for(i = ; i <= n; ++i) {
if(f == ) { printf("0\n"); return ; }//有三个以上d
t = a[i] - a[i-];
if(t == d1) cnt1++;
else if(t == d2) cnt2++;
else if(t != d1 && f == ) { cnt2++; d2 = t; f = ; k = i;}//有d2
else if(t != d1 && t != d2 && f == ) { f = ; }
}
int ff = ;
if(d1 > d2) { ff = ; swap(d1, d2); swap(cnt1, cnt2); } //d2 > d1 if(f == ) {
if(d1 == ) {printf("1\n%lld\n", a[]);}
else if((d1 % == ) && n == ) { printf("3\n%lld %lld %lld\n", a[]-d1, a[]+d1/, a[n]+d1); }
else { printf("2\n%lld %lld\n", a[]-d1, a[n]+d1); }
}
else { //f = 2
if(d2 == *d1 && cnt2 == ) {
if(ff == )
printf("1\n%lld\n", a[k]-d1);
else printf("1\n%lld\n", a[k-]-d1);
}
else printf("0\n");
}
return ;
}
codeforces 450D. Jzzhu and Cities 【SPFA】
题意:有n个城市,编号1~n,已知有m条公路和k条铁轨, 保证从1号城市到其他城市距离最短,问可以关闭多少条铁轨。
题解:最短路,看着还有重边,想想SPFA的复杂度E log V,看着数据范围可以就直接用了。
将铁轨进行标记,对d数组进行初始化,并先入队列(刚开始想先求只有公路的最短路,最后考虑铁轨的思路 错误,因为可能有的城市最短路要经过铁路),然后SPFA啦,若是铁路的边被松弛,则对其进行标记,关闭这条铁轨。最后统计判断存在的铁轨数,将原铁轨数减去它就行了。
//yy:最近习惯用链式前向星,结果TLE了,想了想不对劲复杂度没问题啊,,后来经过各种折磨,换成vector存图就AC了,好气啊、姿势老错。。
//补题: AC by lyy
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<cmath>
#include<queue>
#include<limits.h>
#define CLR(a,b) memset((a),(b),sizeof((a)))
using namespace std;
typedef long long ll;
const int mod = 1e9+;
const int N = 1e5+;
const int M = 3e5+;
const ll inf = 0x3f3f3f3f3f3f3f3f;
struct node {
int v;
int w;
}E[*M];
vector<node> ve[N]; int n, m, k; ll d[N];
bool vis[N];
bool train[N];//是否为铁路 queue<int> q;
void spfa() {
while(!q.empty()) {
int u = q.front(); q.pop();
vis[u] = ;
for(int i = ; i < ve[u].size(); ++i) {
int v = ve[u][i].v;
int w = ve[u][i].w;
if(d[v] >= d[u] + w) {
d[v] = d[u] + w;
if(train[v]) {
train[v] = false;//关闭这个铁轨
}
if(!vis[v]) {
vis[v] = true;
q.push(v);
}
}
}
}
}
int main() {
CLR(vis, );
CLR(train, );
int i, j;
int u, v, w;
scanf("%d%d%d", &n, &m, &k);
for(i = ; i <= n; ++i) {
d[i] = inf;
}
d[] = ; vis[] = ;
q.push(); for(i = ; i <= m; i ++) {
scanf("%d%d%d", &u, &v, &w);
ve[u].push_back(node{v, w});
ve[v].push_back(node{u, w});
} for(i = ; i <= k; ++i) {
scanf("%d%d", &v, &w);
train[v] = true;
if(d[v] > w) {
d[v] = w;
if(!vis[v]) {
q.push(v);
vis[v] = true;
}
} }
spfa();
for(i = ; i <= n; ++i) {
if(train[i]) k--;
}
printf("%d\n", k);
return ;
}
其他题都还做不出来,补都补不动orz
Mutual Training for Wannafly Union #2的更多相关文章
- 【Mutual Training for Wannafly Union #1 】
A.Phillip and Trains CodeForces 586D 题意:过隧道,每次人可以先向前一格,然后向上或向下或不动,然后车都向左2格.问能否到达隧道终点. 题解:dp,一开始s所在列如 ...
- Mutual Training for Wannafly Union #1解题报告
---恢复内容开始--- q神等人组织的vjudge上的多校训练,题目基本上都来自于CF,#1是上周进行的,参加后感觉收获很多,因为上周准备期中比较忙,解题报告现在补上. 比赛地址(兼题目地址) A题 ...
- Mutual Training for Wannafly Union #6 E - Summer Trip(并查集)
题目链接:http://www.spoj.com/problems/IAPCR2F/en/ 题目大意: 给m个数字代表的大小,之后n组数据,两两关联,关联后的所有数字为一组,从小到大输出组数以及对应的 ...
- Mutual Training for Wannafly Union #8 D - Mr.BG Hates Palindrome 取余
Mr.BG is very busy person. So you have been given enough time (1000 milliseconds) to help him. Mr. B ...
- Mutual Training for Wannafly Union #9
A(SPOJ NPC2016A) 题意:给一个正方形和内部一个点,要求从这个点向四边反射形成的路线的长度 分析:不断做对称,最后等价于求两个点之间的距离 B(CF480E) 题意:求01矩阵内由0组成 ...
- Mutual Training for Wannafly Union #6
A =w= B QvQ C 题意:有长度为n的序列(n<=5e5),求满足条件的a,b,c,d的组数,要求满足条件:min([a,b])<=min([c,d]),a<=b<c& ...
- Mutual Training for Wannafly Union #5
A(UVA12336) 题意:给一个n*m(n,m<=1e5)的棋盘,棋盘上有一些障碍点不能放棋子,现在要在棋盘上放4个棋子,满足A->B->C->D->A,其中走的规则 ...
- Wannafly Union Goodbye 2016
A 题意:平面上有n个点(n<=100000),给你一个p(20<=p<=100) 判断是否存在一条直线至少过[np/100](向上取整)个点,时限20s,多组数据 分析:概率算法 ...
- Wannafly Union#1
题目链接:http://vjudge.net/contest/142053#overview A.题意:有一个3*n的隧道,人和车轮流走,人先向右走一步,然后选在是在原地不动还是上下移动一格,之后车开 ...
随机推荐
- 使用rem单位的问题——Google下字体很大
rem的看法 rem单位确实好处蛮多的,它是相对于根节点,让我们整个网站单位可以统一.还可以让我们的字体更好的自适应网站的大小.但是,你用过了就知道,它会出现一个问题: 用Chrome浏览器打开你做的 ...
- sz的博客感想
https://www.cnblogs.com/freeflying/p/4796369.html 在很多人眼里,当把中学和大学对比起来的时候,大学只能用一个字形容:“渣”.我的大学前两年过得比较随性 ...
- Golang教程:接口
什么是接口 在面向对象语言中,接口一般被定义为 :接口定义了一个对象的行为.它仅仅指定了一个对象应该做什么.具体怎么做(实现细节)是由对象决定的. 在 Go 中,一个接口定义为若干方法的签名.当一个类 ...
- spring中使用quartz时注入时出现的错误
错误1: 配置文件: <!-- 任务执行器的线程池 --> <bean id="taskExecutor" class="org.springframe ...
- 启停无线网卡bat脚本
@echo off color 2 title 启停无线网卡 echo 启动无线网卡=======>按1键 echo 关闭无线网卡=======>按2键 set /p n= if /i & ...
- 第六章使用java实现面向对象-集合框架
一:接口:即表示集合的抽象数据类型. 实现:即集合框架中接口的实现. 算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找. 排序等. Collection 接口存储一组 ...
- IE9 和IE10 兼容性判断及效果
仅IE9可识别 .d1{ width:100px; height:100px; background:blue; } IE9及一下使用<!--[if IE 8]><![endif]- ...
- 转IE9以下$.ajax跨域返回“No transport”
$.ajax({ type: "POST", async: false, contentType: "application/x-www-form-urlencoded; ...
- js-js和HTML的两种结合方式
第一种: - 使用一个标签 <script type="text/javascript"> js代码; </script> 第二种: - 使用script标 ...
- js权威指南学习笔记(四)对象
1.创建对象 (1).通过对象直接量的方式创建 说明:对象直接量是由若干名/值对组成的映射表,名/值对中间用冒号分隔,名/值对之间用逗号分隔,整个映射表用花括号括起来. 如: 5 5 ...