真题演练1

ACM-ICPC 2017 Asia Shenyan

F. Heron and His Triangle

三边长给出,海伦公式算出面积,暴力枚举整数情况,得:

4,14,52,194,724等数据

之后就要灵性找规律了,得:a[i] = a[i-1]*4-a[i-2]

总结:1.对于类似题目,暴力枚举出一大串数据之后,应该第一时间反应过来找规律。 2.大数题应考虑java或python写(java暂时不会)

a={}
a[1]=4
a[2]=14
for i in range(3,61,1):
    a[i]=a[i-1]*4-a[i-2]
t=int(input())
for i in range(1,t+1,1):
    k=int(input())
    for j in range(1,61,1):
        if a[j]>=k :
            print(a[j])
            print("\n")
            break

G. Infinite Fraction Path

bfs+剪枝即可

总结:对于普通情况而言,一个不起眼的剪枝根本起不到作用,但是对于十分极端情况而言,比如数据全都是同一个数,这个剪枝算是能够“特判”掉这种数据,避免超时。

#include <bits/stdc++.h>
#define debug freopen("r.txt","r",stdin)
#define mp make_pair
using namespace std;
typedef long long ll;
const int maxn = 250010;
const int INF = 0x3f3f3f3f;
const int mod = 998244353;
inline ll read(){ll s=0,w=1;char ch=getchar();
while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)w=-1;ch=getchar();}
while(ch>=‘0‘&&ch<=‘9‘) s=s*10+ch-‘0‘,ch=getchar();
return s*w;}
ll qpow(ll p,ll q){return (q&1?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;}
struct node
{
    int step;
    ll pos;
};
int b[maxn],vis[maxn],c[maxn],i,j,t,maxx,cnt,x;
ll n;
char ans[maxn],s[maxn],a[maxn];
queue<node> q;
map <int,int> mapp;
void bfs()
{
    node k;
    while (!q.empty())
    {
        k=q.front();
        q.pop();
        if (k.step==n) continue;
        if (s[k.pos]==ans[k.step])
        {
            if (vis[k.pos]==k.step) continue;//important
            vis[k.pos]=k.step;
            k.pos=(k.pos*k.pos+1)%n;
            k.step++;
            if (s[k.pos]>=ans[k.step])
            {
                ans[k.step]=s[k.pos];
                q.push(k);
            }
        }
    }
}
int main()
{
    t=read();
    while (t--)
    {
        n=read();
        scanf("%s",s);
        maxx=-INF;
        memset(ans,-1,sizeof(ans));
        while (!q.empty()) q.pop();
        for (i=0;i<n;i++)
        {
            maxx=max(maxx,(int)s[i]);
        }
        for (i=0;i<n;i++)
            if (maxx==s[i])
            {
                q.push({1,i});
            }
        memset(vis,-1,sizeof(vis));
        ans[1]=maxx;
        bfs();
        printf("Case #%d: ",++cnt);
        ans[n+1]=‘\0‘;
        printf("%s",ans+1);
        printf("\n");
    }
    return 0;
}

I. Little Boxes

如果直接四个数相加,数据可能会刚好等于2^64次方,超过ull,这时候可以特判,也可以python做

总结:对于一道真的裸的不能再裸的签到题,写完应该看一眼提交榜单,或许有其他倒霉蛋踩了坑,提交上去怒收WA,这时候应该注意此题有坑。

K. Rabbits

普通签到题,没有I题裸

#include <bits/stdc++.h>
#define debug freopen("r.txt","r",stdin)
#define mp make_pair
using namespace std;
typedef long long ll;
const int maxn = 150005;
const int INF = 0x3f3f3f3f;
const int mod = 998244353;
inline ll read(){ll s=0,w=1;char ch=getchar();
while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)w=-1;ch=getchar();}
while(ch>=‘0‘&&ch<=‘9‘) s=s*10+ch-‘0‘,ch=getchar();
return s*w;}
ll qpow(ll p,ll q){return (q&1?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;}
int t,n,i,sum,a[maxn];
int main()
{
    t=read();
    while (t--)
    {
        n=read();
        sum=0;
        for (i=1;i<=n;i++) a[i]=read();
        if (a[2]-a[1]<a[n]-a[n-1])
        for (i=2;i<n;i++) sum+=a[i+1]-a[i]-1;
        else for (i=1;i<n-1;i++) sum+=a[i+1]-a[i]-1;
        cout<<sum<<endl;
    }
    return 0;
}

L. Tree

题意:给了一个无向图,题目保证了是连通图,可以看成一棵树。然后给N个结点分别涂上K种颜色,所有相同颜色的结点连在一起构成一个边集,问所有边集的交集最大是多少?

可以对边进行考虑,边连结两侧,那么只有当两侧的结点数量>=k时才可能满足该边是所有边集的公共边。统计一下满足这种条件这种公共边的数量就是答案了。

#include <bits/stdc++.h>
#define debug freopen("r.txt","r",stdin)
#define mp make_pair
using namespace std;
typedef long long ll;
const int maxn = 250010;
const int INF = 0x3f3f3f3f;
const int mod = 998244353;
inline ll read(){ll s=0,w=1;char ch=getchar();
while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)w=-1;ch=getchar();}
while(ch>=‘0‘&&ch<=‘9‘) s=s*10+ch-‘0‘,ch=getchar();
return s*w;}
ll qpow(ll p,ll q){return (q&1?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;}
int t,n,m,i,x,y,ans,son[maxn];
vector <int> G[maxn];
void dfs(int u,int father)
{
    son[u]+=1;
    for (auto v:G[u])
    {
        if (v==father) continue;
        dfs(v,u);
        son[u]+=son[v];
        if (son[v]>=m&&n-son[v]>=m) ans++;
    }
}
int main()
{
    t=read();
    while (t--)
    {
        n=read(),m=read();
        fill(son+1,son+1+n,0);
        for (i=1;i<n;i++)
        {
            x=read(),y=read();
            G[x].push_back(y);
            G[y].push_back(x);
        }
        ans=0;
        dfs(1,0);
        cout<<ans<<endl;
        for (i=1;i<=n;i++)  G[i].clear();
    }
    return 0;
}

总结:这种题目偏长,题意也难懂但是解法相对简单的题目,需要比较深的英语、语文功底才能做的了,但是这种题目如果率先读完了解题意并且AC,或许是与别人拉开差距的题目。

原文地址:https://www.cnblogs.com/Y-Knightqin/p/12695109.html

时间: 2024-11-09 04:32:50

真题演练1的相关文章

2015中考地理生物复习提纲真题演练软件复习方法

2015年中考即将来临了,为了更好的帮助同学们更好的对中考地理.生物知识复习,中考真题进行汇总,希望可以给大家带来帮助,祝同学们中考取得好成绩! 孩子们 平常感觉学习很累 很苦 ,换个学习方法让孩子 学习像玩一样轻松 快乐,学习心态好 心情好 记忆力肯定深刻 经过 我们的科研团队的不懈努力 终于开发出 2015年 中考 地理 生物复习提纲 试卷及答案融为一体的 中考地理 生物会考大杀器 真题演练复习软件 本软件 覆盖知识点全面 实属全国性的 各个地区都非常适应,人教版 川教版等各个版本都离不开

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh童鞋的提醒. 勘误2:第7题在推断连通的时候条件写错了,后两个if条件中是应该是<=12 落了一个等于号.正确答案应为116. 1.煤球数目 有一堆煤球.堆成三角棱锥形.详细: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形). -. 假设一共

程序设计语言基本概念语 与经典真题

一.基本概念 在计算机中,程序设计语言可划分为低级语言和高级语言两大类,与高级语言相比,用低级语言开发的程序,其运行效率高,但开发效率低.与程序设计相关的基本概念如下. (1)低级语言:又称面向机器语言,它是特定的计算机系统所固有的语言. (2)汇编语言:是机器语言的一种提升,它使用了一些助记符来表示机器指令中的操作码和操作数.但它仍然是一种和计算机机器语言十分接近的语言,使用起来仍然不太方便. (3)高级语言:与人们的自然语言比较接近,使用起来很方便,也极大的提高了程序设计效率. (4)编译程

[华为机试真题]66.单词搜索

题目 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 * 题目:WordSearch * 来源:华为机试真题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector> #include <stack> #include

九度oj 1034 寻找大富翁 2009年浙江大学计算机及软件工程研究生机试真题

题目1034:寻找大富翁 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5323 解决:2123 题目描述:     浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁. 输入:     输入包含多组测试用例.    每个用例首先包含2个整数n(0<n<=100000)和m(0<m<=10),其中: n为镇上的人数,m为需要找出的大富翁数, 接下来一行输入镇上n个人的财富值.    n和m同时为0时表示输入结束. 输出:     请输出乌镇前m个大富翁的财产数,财产多的

九度oj 1464 Hello World for U 2012年浙江大学计算机及软件工程研究生机试真题

题目1464:Hello World for U 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:3872 解决:1082 题目描述: Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. For example, "helloworld" can be printed as: h    de     ll      rlowo

蓝桥杯——真题训练之蚂蚁感冒

标题:蚂蚁感冒 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂蚁感冒了.并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁. 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒. [数据格式] 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数. 接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100),

蓝桥杯——历年真题之带分数

问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0). 类似这样的带分数,100 有 11 种表示法. 输入格式 从标准输入读入一个正整数N (N<1000*1000) 输出格式 程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数. 注意:不要求输出每个表示,只统计有多少表示法! 样例输入1 100 样例输出1 11 样例输入

九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题

题目1165:字符串匹配 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2497 解决:858 题目描述: 读入数据string[ ],然后读入一个短字符串.要求查找string[ ]中和短字符串的所有匹配,输出行号.匹配字符串.匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配.如"aa[123]bb",就是说aa1bb.aa2bb.aa3bb都算匹配. 输入: 输入有多组数据. 每组数据第一行输入n(1<=n<=1000),从第二行开始输入n个字符串(