补题0%……计划进行中

CodeForces 202B:

MDZZ题目长死了,题意大概是给你一个句子,把它全排序,然后下面给你要你匹配的句子,问你,排序后逆序数最少,并且能匹配成功的那个编号,如果逆序数一样的话,就输出最小的那个编号,然后后面输出的东西就是照着题意给的那个式子。

#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <stack>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <queue>
#include <ctime>
#define cl(A) memset(A, 0, sizeof(A))
#define lowbit(x) (x & -x)
using namespace std;
typedef long long LL;
const int mod=1e9+7;
const int maxn=2e5+10;
const int inf=0x3f3f3f3f;
struct node {
    char s[25][15];
    int k;
} st[15];
int num[10];
char l[10][15];
int main() {
#ifdef local
    freopen("in", "r", stdin);
#endif
    int n,m;
    cin>>n;
    for(int i = 0; i < n ; i++) {
        scanf("%s",l[i]);
        num[i]=i;
    }
    cin>>m;
    for(int i=0; i<m; i++) {
        scanf("%d",&st[i].k);
        for(int j=0; j<st[i].k; j++)
            scanf("%s",st[i].s[j]);
    }
    int p=20,ans=inf;
    do {
        int nixu=0;
        for(int i=0; i<n; i++) {
            for(int j=0; j<i; j++) {
                if(num[j]>num[i])nixu++;
            }
        }
        if(nixu>ans)continue;
        for(int i=0; i<m; i++) {
            int pi=0;
            for(int j=0; j<st[i].k&&pi<n; j++) {
                if(strcmp(l[num[pi]],st[i].s[j])==0)pi++;
            }
            if(pi==n&&(nixu<ans||(ans==nixu&&p>i))) {
                p=i;
                ans=nixu;
            }
        }
    } while(next_permutation(num,num+n));
    if(ans==inf) {
        puts("Brand new problem!");
    } else {
        printf("%d\n",p+1);
        printf("[:");
        for(int i=0; i<n*(n-1)/2+1-ans; i++)putchar(‘|‘);
        puts(":]");
    }
}

Gym 100676F

发现以前做不出真是有点脑残。。这么水的并查集。题意问给你一串长度为n的字符串,里面有可能包含‘?‘还有小写字母,还有m个操作,每个有a,b表示这两个位置的字符相同,然后问你有几种方案使得这个字符串变成回文串。边判边并起来就行了。最后答案就是26^cnt.

#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <stack>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <queue>
#include <ctime>
#define cl(A) memset(A, 0, sizeof(A))
#define lowbit(x) (x & -x)
using namespace std;
typedef long long LL;
const int mod=1e9+7;
const int maxn=2e5+10;
const int inf=0x3f3f3f3f;
int fa[500005];
char s[500005];
void init(int n){
    for(int i=0;i<=n;i++)
        fa[i]=i;
}
int finds(int x){
    if(fa[x]==x)return x;
    return fa[x]=finds(fa[x]);
}
void uf(int a,int b){
    if(a==b)return;
    if(s[a]!=‘?‘)
        fa[b]=a;
    else
        fa[a]=b;
}
int main() {
#ifdef local
    freopen("in", "r", stdin);
#endif
    int T;
    scanf("%d",&T);
    while(T--){
        bool flag=1;
        int n,m;
        scanf("%d%d",&n,&m);
        init(n);
        scanf("%s",s);
        for(int i=0;i<n;i++){
            if(s[i]!=‘?‘&&s[n-i-1]!=‘?‘&&s[i]!=s[n-i-1])flag=0;
            else if(s[i]==‘?‘)s[i]=s[n-i-1];
            else s[n-i-1]=s[i];
        }
        for(int i=0;i<m;i++){
            int a,b;
            scanf("%d%d",&a,&b);
            --a,--b;
            a=finds(a);
            b=finds(b);
            if(s[a]!=‘?‘&&s[b]!=‘?‘&&s[a]!=s[b])flag=0;
            if(flag)uf(a,b);
        }
        for(int i=0,j=n-1;i<n/2;i++,j--){
            int a,b;
            a=finds(i);
            b=finds(j);
            if(s[a]!=‘?‘&&s[b]!=‘?‘&&s[a]!=s[b])flag=0;
            if(flag)uf(a,b);
        }
        if(!flag)cout<<0<<endl;
        else {

            int cnt=0;
            for(int i=0;i<n;i++){
                int h=finds(i);
                if(s[h]==‘?‘&&fa[i]==i){
                        cnt++;
                }
            }
            LL ans=1;
            for(int i=0;i<cnt;i++)ans=(26*ans)%mod;
            cout<<ans<<endl;
        }
    }
}

时间: 2024-12-30 12:57:13

补题0%……计划进行中的相关文章

2020-3-14 acm训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019 解题报告+补题报告

2020-3-15比赛解题报告+2020-3-8—2020-3-15的补题报告 2020-3-15比赛题解 训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019  A建筑(模拟) 耗时:3ms 244KB 建筑 你哥哥在最近的建筑问题突破大会上获得了一个奖项 并获得了千载难逢的重新设计城市中心的机会 他最喜欢的城市奈梅根.由于城市布局中最引人注目的部分是天际线, 你的兄弟已经开始为他想要北方和东方的天际线画一些想法

4.30-5.1cf补题

//yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模,就抽空把最近没做的CF题补了点..毕竟明天开始又要继续上好多课呐...Yes, I can!(? •_•)?……(I can Huá shuǐ~~) codeforces 803 A. Maximal Binary Matrix   [简单构造] 题意:n行和n列填充零矩阵. 您要将k个1放在其中,使得得到

[2015hdu多校联赛补题]hdu5371 Hotaru&#39;s problem

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5371 题意:把一个数字串A翻过来(abc翻过来为cba)的操作为-A,我们称A-AA这样的串为N-sequence,现在给你一个数字串,问你这个串中最长的N-sequence子串长度 解:可以想到A-A是一个回文串,-AA也是一个回文串,那么首先Manacher跑一遍求出所有回文子串 可以想到任意两个互相覆盖的回文子串都可以表示成N-sequence 然后有三种搞法: 1.时间复杂度O(N*logN

hdu5017:补题系列之西安网络赛1011

补题系列之西安网络赛1011 题目大意:给定一个椭球: 求它到原点的最短距离. 思路: 对于一个椭球的标准方程 x^2/a^2 + y^2/b^2 +z^2/c^2=1 来说,它到原点的最短距离即为min(a,b,c) 所以我们需要把原方程化为标准型. 这时候线代就排上用场了,注意到原方程是一个二次型. 化为标准型 1/(k1)*x^2+1/(k2)*y^2+1/(k3)*z^2=1 后  min(k1,k2,k3)即为答案 而这里的1/k1,1/k2,1/k3 就是二次型矩阵的特征值 如何求特

2018 HDU多校第三场赛后补题

2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube 题意: 在画布上画一个三维立方体. 题解: 模拟即可. 代码: #include <bits/stdc++.h> using namespace std; int a, b, c, R, C; char g[505][505]; int main () { int T; cin >>

(补题 杭电 2046)骨牌铺方格

骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 68313 Accepted Submission(s): 32884 Problem Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图: Input 输入数据由

Codeforces VP/补题小记 (持续填坑)

Codeforces VP/补题小记 1149 C. Tree Generator 给你一棵树的括号序列,每次交换两个括号,维护每次交换之后的直径. ? 考虑括号序列维护树的路径信息和,是将左括号看做 \(-1\) ,右括号看做 \(1\) ,那么一段竖直向上的路径可以表示为括号序列的一个区间和,一段竖直向下的路径可以看做括号序列的一个区间和的相反数.我们要维护的是树的直径,也就是一段连续的和减去紧随其后的一段连续的差.具体来说就是 \[ \max_{\forall [l,r]}\{\sum_{

Codeforces Round #634 (Div. 3) 补题

A. Candies and Two Sisters 签到题,直接输出即可 代码 #include<bits/stdc++.h> #define INF 0x3f3f3f3f typedef long long ll; using namespace std; inline void read(int &p) { p=0;int flag=1;char c=getchar(); while(!isdigit(c)) {if(c=='-') flag=-1;c=getchar();} w

算法题:求数组中最小的k个数

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 题目:输入n个整数,找出其中最小的k个数. <剑指offer>给出了两种实现算法: 算法1:采用Partition+递归法,该算法可以说是快速排序和二分查找的有机结合.算法的时间复杂度为O(n),缺点在于在修改Partition的过程中会修改原数组的值. 算法2:采用top-k算法.如果要找最小的K个数,我们才用一个含有K个值的大顶堆:如果要找最大的K个数,我们采用小顶堆.该算法的时间复杂度为O(nlogK),是一种比较好的算法,启发于堆排序