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[1005];
    scanf("%s",ss);
    int len=strlen(ss);
    int i;
    int begin,end;
    for(i=0;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+1;i<len;i++)
        {
            if(ss[i]==‘.‘)
            {
                end=i;
                break;
            }
            else if(ss[i]==‘L‘)
            {
                end=i-1;
                break;
            }
            else
            continue;
        }
        printf("%d %d",begin+1,end+1);
    }
    else if(ss[begin]==‘L‘)
    {
        for(i=len-1;i>=0;i--)
        {
            if(ss[i]==‘L‘)
            {
                begin=i;
                break;
            }
            else
            {
                continue;
            }
        }
        printf("%d %d",begin+1,end);
    }
    return 0;
}

codeforces 298B. Sail

模拟。水题。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char q[100005];
int main()
{
    int t,sx,sy,ex,ey;
    scanf("%d %d %d %d %d",&t,&sx,&sy,&ex,&ey);
    scanf("%s",q);
    int ans=0;
    bool f=false;
    for(int i=0;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 0;
}

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+7;
const int N = 1e5+5;
const int inf = 0x3f3f3f3f;

int n;
ll a[N];

int main() {
    int i, j;
    ll d1 , d2;

    ll k;

    scanf("%d", &n);
    for(i = 1; i <= n; ++i) {
        scanf("%lld", &a[i]);
    }
    sort(a+1, a+1+n);
    int t;
    if(n == 1) {printf("-1\n"); return 0;}

    int cnt1 = 0, cnt2 = 0;//d1,d2数量

    d1 = d2 = a[2] - a[1];
    int f = 1;//只有d1

    for(i = 2; i <= n; ++i) {
        if(f == 3) { printf("0\n"); return 0; }//有三个以上d
        t = a[i] - a[i-1];
        if(t == d1) cnt1++;
        else if(t == d2) cnt2++;
        else if(t != d1 && f == 1) { cnt2++; d2 = t; f = 2; k = i;}//有d2
        else if(t != d1 && t != d2 && f == 2) { f = 3; }
    }
    int ff = 1;
    if(d1 > d2) { ff = 2; swap(d1, d2); swap(cnt1, cnt2); }  //d2 > d1

    if(f == 1) {
        if(d1 == 0) {printf("1\n%lld\n", a[1]);}
        else if((d1 % 2 == 0) &&  n == 2 ) { printf("3\n%lld %lld %lld\n", a[1]-d1, a[1]+d1/2, a[n]+d1); }
        else { printf("2\n%lld %lld\n", a[1]-d1, a[n]+d1); }
    }
    else {  //f = 2
        if(d2 == 2*d1 && cnt2 == 1) {
            if(ff == 1)
            printf("1\n%lld\n", a[k]-d1);
            else printf("1\n%lld\n", a[k-1]-d1);
        }
        else printf("0\n");
    }
    return 0;
}

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+7;
const int N = 1e5+5;
const int M = 3e5+5;
const ll inf = 0x3f3f3f3f3f3f3f3f;
struct node {
    int v;
    int w;
}E[2*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] = 0;
        for(int i = 0; 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, 0);
    CLR(train, 0);
    int i, j;
    int u, v, w;
    scanf("%d%d%d", &n, &m, &k);
    for(i = 1; i <= n; ++i) {
        d[i] = inf;
    }
    d[1] = 0; vis[1] = 1;
    q.push(1);

    for(i = 1; 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 = 1; 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 = 1; i <= n; ++i) {
        if(train[i]) k--;
    }
    printf("%d\n", k);
    return 0;
}

其他题都还做不出来,补都补不动orz

时间: 2024-10-13 23:01:24

Mutual Training for Wannafly Union #2的相关文章

Mutual Training for Wannafly Union #7(待续)

剩下的题等礼拜天补吧.最近要赶作业什么的还要补点dp A - Ada and List(伸展树或者vector暴力- -) 思路: vector玄学均摊复杂度...能直接暴力A了.窝居然写了人生第一个伸展树- -.蠢到家了. 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 vector<int>vec; 6 int n, m; 7 scanf("%d%d", &n,

Mutual Training for Wannafly Union #1解题报告

---恢复内容开始--- q神等人组织的vjudge上的多校训练,题目基本上都来自于CF,#1是上周进行的,参加后感觉收获很多,因为上周准备期中比较忙,解题报告现在补上. 比赛地址(兼题目地址) A题 DFS搜索所有路径,需要注意的是走的顺序,先向前走一步,再向上或向下或静止不动,由于车一直在走,可以认为是相对运动,即人再向右侧走两个格子.遇到当前位置是车就说明走不通,可以走出的条件是已经在此行所有车的后面. 注意,一定要写visited记录走没走过格子(也就我这种搜索初学者会犯这么傻的错误吧,

【Mutual Training for Wannafly Union #1 】

A.Phillip and Trains CodeForces 586D 题意:过隧道,每次人可以先向前一格,然后向上或向下或不动,然后车都向左2格.问能否到达隧道终点. 题解:dp,一开始s所在列如果前方为'.'则dp[i]=1.r[i]代表上一次的dp[i]值. 如果该行当前可行,那么它就可以更新它上下两行(如果有),必须用r[i]去更新. 再判断每行在当前时间是否会发生撞车:看看位置 i+t*2,i+t*2+1,i+t*2+2 是否有车. #include <iostream> #inc

soj [Union Training I] N AC自动机 + dp

Problem: 给你m个字符串,问长度为n,至少包含其中一个字符串为子串的字符串的个数. Analize: - 将问题转化为 26k?不包含任意子串的个数 ,这里用AC自动机来建立禁止字符串. - 所有节点的子节点开始都为根节点,在添加禁止字符串的过程中扩展 - 利用fail指针来扩展禁止字符串,也就是当前字符串的fail指针的字符串如果都是禁止字符串那么当前节点也一定是. /**********************jibancanyang*************************

Liberty Mutual Property Inspection, Winner&#39;s Interview: Qingchen Wang

Liberty Mutual Property Inspection, Winner's Interview: Qingchen Wang The hugely popular Liberty Mutual Group: Property Inspection Prediction competition wrapped up on August 28, 2015 with Qingchen Wang at the top of a crowded leaderboard. A total of

2016 UESTC Training for Data Structures

2016 UESTC Training for Data Structures A - 卿学姐与公主 题意: 有两个操作一个是单点造成攻击,第二个是求区间最大值. 题解: 0.裸的线段树操作,不过zkw线段树显然更好. 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 1000

机器学习基石——第5-6讲.Training versus Testing

本栏目(机器学习)下机器学习基石专题是个人对Coursera公开课机器学习基石(2014)的学习心得与笔记.所有内容均来自Coursera公开课Machine Learning Foundations中Hsuan-Tien Lin林轩田老师的讲解.(https://class.coursera.org/ntumlone-002/lecture) 第5讲-------Training versus Testing 从这一讲开始,讲的问题就是属于Why Can Machines Learn的范畴了.

spark 教程三 spark Map filter flatMap union distinct intersection操作

RDD的创建 spark 所有的操作都围绕着弹性分布式数据集(RDD)进行,这是一个有容错机制的并可以被并行操作的元素集合,具有只读.分区.容错.高效.无需物化.可以缓存.RDD依赖等特征 RDD的创建基础RDD 1.并行集合(Parallelized Collections):接收一个已经存在的Scala集合,然后进行各种并行运算 var sc=new SparkContext(conf) var rdd=sc.parallelize(Array(2,4,9,3,5,7,8,1,6)); rd

Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller

原文地址:http://android.xsoftlab.net/training/gestures/scroll.html 在Android中,滑动经常由ScrollView类来实现.任何超出容器边界的布局都应该将自己内嵌在ScrollView中,以便提供可滚动的视图效果.自定义滚动只有在特定的场景下才会被用到.这节课将会描述这样一种场景:使用scroller显示一种可滚动的效果. 你可以使用Scroller或者OverScroller来收集一些滑动动画所需要的数据.这两个类很相似,但是Ove