链接:https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%2C30

D1T1:转圈游戏(circle)

题意:看题目。。

解题思路:快速幂求\( (10^k m) mod n \)即可。时间效率\( O (\lg k) \)

#include<stdio.h>
#define ll long long
#define For(i,a,b) for(int i=a; i<=b; i++)
#define Ford(i,a,b) for(int i=a; i>=b; i--)
#define File(fn) freopen(fn".in","r",stdin);freopen(fn".out","w",stdout);
int n,m,k,x;
inline int in(){
int x=,f=;
char ch=getchar();
while(ch<''||ch>'') f=ch=='-'?-:,ch=getchar();
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x*f;
}
inline void print(int x,char ch){
if (!x){
putchar('');
putchar(ch);
return;
}
if (x<){
putchar('-');
x*=-;
}
char num[];
short cnt=;
while(x) num[++cnt]=x%+'',x/=;
while(cnt) putchar(num[cnt--]);
putchar(ch);
}
inline ll ksm(int a,int k){
if (!k) return ;
if (!(k^)) return a;
ll t=ksm(a,k>>)%n;
t*=t;t%=n;
if (k&) t*=a;
t%=n;
return t;
}
int main(){
n=in(),m=in(),k=in(),x=in();
print((ksm(,k)*m%n+x)%n,'\n');
}

D1T2:火柴排队(match)

题意:将一个数组中元素进行几次交换后使得这个数组的大小顺序与另一个数组相同。

解题思路:离散后排序求逆序对数。时间效率\( O(n \lg n) \).

#include<stdio.h>
#include<algorithm>
#define ll long long
#define For(i,a,b) for(int i=a; i<=b; i++)
#define Ford(i,a,b) for(int i=a; i>=b; i--)
#define File(fn) freopen(fn".in","r",stdin);freopen(fn".out","w",stdout);
#define mod 99999997
using namespace std;
struct zxy{
int num,no;
}a[],b[];
int n,ans=,c[],BIT[];
inline int in(){
int x=,f=;
char ch=getchar();
while(ch<''||ch>'') f=ch=='-'?-:,ch=getchar();
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x*f;
}
inline void print(int x,char ch){
if (!x){
putchar('');
putchar(ch);
return;
}
if (x<){
putchar('-');
x*=-;
}
char num[];
short cnt=;
while(x) num[++cnt]=x%+'',x/=;
while(cnt) putchar(num[cnt--]);
putchar(ch);
}
bool cmp(zxy a,zxy b){
return a.num<b.num;
}
void init(){
n=in();
For(i,,n) a[i].num=in(),a[i].no=i;
For(i,,n) b[i].num=in(),b[i].no=i;
sort(a+,a+n+,cmp);
sort(b+,b+n+,cmp);
For(i,,n) c[b[i].no]=a[i].no;
}
inline int lowbit(int k){
return k&(-k);
}
inline void update(int x,int ad){
while(x<=n){
BIT[x]+=ad;
x+=lowbit(x);
}
}
inline int query(int x){
int sum=;
while(x){
sum+=BIT[x];
x-=lowbit(x);
}
return sum;
}
void solve(){
For(i,,n){
update(c[i],);
ans+=(i-query(c[i]));
ans%=mod;
}
print(ans,'\n');
}
int main(){
init();
solve();
return ;
}

D1T3:货车运输(truck)

题意:给你一张图,问你从一个点到另一个点的路径上的最大的路径上最小的权值是多少,如果不能联通输出-1.

解题思路:首先为了方便处理,我们将所有点向0号点连一条权值为-1的边,这样保证所有点可以联通的同时会输出答案-1.接下来,我们考虑题意要求的使得“最小的尽可能”大的条件,发现可以使用最大生成树实现,接下来考虑查询两点间的树上路径中权值最小的边,使用LCA即可作答,这里可以使用所有的LCA算法,我使用了理解与实现都较为容易倍增求LCA,时间效率为\( O(m \lg m+q \lg n) \)。

附优化了各种常数的代码(貌似还可以继续优化)。

#include<stdio.h>
#include<algorithm>
#define INF 0x7fffffff
using namespace std;
struct zxy{
int x,y,l;
}edge[];
struct tree{
int next,to,v;
}tr[];
int father[],fa[][],n,m,q,cnt=,used[],deep[],head[],dis[][];
inline int in(){
int x=,f=;
char ch=getchar();
while(ch<''||ch>'') f=ch=='-'?-:,ch=getchar();
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x*f;
}
inline int find(int x){
return father[x]=father[x]==x?x:find(father[x]);
}
bool cmp(zxy a,zxy b){
return a.l>b.l;
}
inline void ins(int x,int y,int l){
edge[++cnt].x=x,edge[cnt].y=y,edge[cnt].l=l;
}
inline void ins2(int x,int y,int l){
tr[++cnt].to=y,tr[cnt].next=head[x],head[x]=cnt,tr[cnt].v=l;
}
void init(){
n=in(),m=in();
int x,y,l;
for (int i=; i<=m; ++i){
x=in(),y=in(),l=in();
ins(x,y,l);ins(y,x,l);
}
}
bool mst(){
for(register int i=; i<=n; ++i)
father[i]=i,ins(,i,-),ins(i,,-);
sort(edge+,edge+cnt+,cmp);
int k=;
for(register int i=; i<=cnt; ++i)
if (find(edge[i].x)!=find(edge[i].y)){
father[find(father[edge[i].x])]=find(edge[i].y);
used[++k]=i;
}
cnt=;
for(register int i=; i<=k; ++i)
ins2(edge[used[i]].x,edge[used[i]].y,edge[used[i]].l),ins2(edge[used[i]].y,edge[used[i]].x,edge[used[i]].l);
return !(k^n);
}
inline void dfs(int x,int d,int f){
deep[x]=d;fa[x][]=f;
for (register int i=head[x]; i; i=tr[i].next)
if (tr[i].to!=f) dis[tr[i].to][]=tr[i].v,dfs(tr[i].to,d+,x);
}
void init_LCA(){
for(int j=; j<=; ++j)
for(register int i=; i<=n; ++i)
fa[i][j]=fa[fa[i][j-]][j-],dis[i][j]=min(dis[i][j-],dis[fa[i][j-]][j-]);
}
inline int query(int x,int y){
if (deep[x]<deep[y]){int t=x;x=y,y=t;}
int mi=INF,d=deep[x]-deep[y];
if (d) for(register int i=; d&&i<=; ++i,d>>=) if (d&) mi=min(mi,dis[x][i]),x=fa[x][i];
if (!(x^y)) return mi;
for(register int i=; i>=; --i) if (fa[x][i]!=fa[y][i]) mi=min(mi,min(dis[x][i],dis[y][i])),x=fa[x][i],y=fa[y][i];
mi=min(mi,min(dis[x][],dis[y][]));
return mi;
}
void lca(){
q=in();
dfs(,,);init_LCA();
for(register int i=; i<=q; ++i){
register int x=in(),y=in();
printf("%d\n",query(x,y));
}
}
int main(){
init();
mst();
lca();
return ;
}

D2T1:积木大赛(block)

题意:看题目。。

解题思路:暴力模拟,具体见代码。时间效率\(O(n)\)。

#include<stdio.h>
#define ll long long
#define For(i,a,b) for(int i=a; i<=b; i++)
#define Ford(i,a,b) for(int i=a; i>=b; i--)
#define File(fn) freopen(fn".in","r",stdin);freopen(fn".out","w",stdout);
int a[],n,h,t,ans;
inline int in(){
int x=,f=;
char ch=getchar();
while(ch<''||ch>'') f=ch=='-'?-:,ch=getchar();
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x*f;
}
inline void print(int x,char ch){
if (!x){
putchar('');
putchar(ch);
return;
}
if (x<){
putchar('-');
x*=-;
}
char num[];short cnt=;
while(x) num[++cnt]=x%+'',x/=;
while(cnt) putchar(num[cnt--]);
putchar(ch);
}
int main(){
n=in();
For(i,,n) a[i]=in();
h=;
For(i,,n)
if (a[i]<a[i-]) ans+=a[i-]-a[h],h=i;
ans+=a[n]-a[h];
print(ans,'\n');
}

D2T2:花匠(flower)

题意:看题目啊。。。

解题思路:显然题目就是叫你找一个最长的连续上升子序列/下降子序列,所以乱搞一下就好了。时间效率\(O(n)\).

#include<stdio.h>
#define ll long long
#define For(i,a,b) for(int i=a; i<=b; i++)
#define Ford(i,a,b) for(int i=a; i>=b; i--)
#define File(fn) freopen(fn".in","r",stdin);freopen(fn".out","w",stdout);
int a[],ans=,flag=-,n;
inline int in(){
int x=,f=;
char ch=getchar();
while(ch<''||ch>'') f=ch=='-'?-:,ch=getchar();
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x*f;
}
inline void print(int x,char ch){
if (!x){
putchar('');
putchar(ch);
return;
}
if (x<){
putchar('-');
x*=-;
}
char num[];
short cnt=;
while(x) num[++cnt]=x%+'',x/=;
while(cnt) putchar(num[cnt--]);
putchar(ch);
}
int main(){
n=in();
For(i,,n) a[i]=in();
For(i,,n){
if (a[i]>a[i-]&&(flag-)) ans++,flag=;
if (a[i]<a[i-]&&flag) ans++,flag=;
}
print(ans,'\n');
}

本文由Melacau编写,Melacau代表M星向您问好,如果您不是在我的博客http://www.cnblogs.com/Melacau上看到本文,请您向我联系,email:13960948839@163.com.

【NOIP2013TG】solution的更多相关文章

  1. about家庭智能设备部分硬件模块功能共享【协同工作】solution

    本人设备列表: Onda tablet {Android} wifi Desktop computer {win7.centos7} 外接蓝牙adapter PS interface 键盘.鼠标{与同 ...

  2. 【leetcode】solution in java——Easy1

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6409067.html 1:Hamming distance The Hamming distance betw ...

  3. 【436】Solution for LeetCode Problems

    Coding everyday. ^_^ 1. Two Sum 重点知识:指针可以存储数值,通过 malloc 新建数组 int* returnSize:Size of the return arra ...

  4. 【NOIP2012TG】solution

    D1T1(Vigenere) 题意:给你一个原串与一个密码串,问你按照题意规则加密后的密文. 解题思路:暴力模拟. #include <stdio.h> ],c[],u1[],u2[]; ...

  5. 【NOIP2014TG】solution

    链接:https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83|31 D1T1(rps) 题意:给你一个周期,以及胜 ...

  6. 【NOIP2016TG】solution

    传送门:https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%7C33 D1T1(toys) 题意:有n个小人, ...

  7. 【NOIP2015TG】solution

    链接:https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%2C32 D1T1(magic) 题意:看题目.. ...

  8. 【NOIP2011TG】solution

    老师最近叫我把NOIPTG的题目给刷掉,于是就开始刷吧= = 链接:https://www.luogu.org/problem/lists?name=&orderitem=pid&ta ...

  9. 【leetcode】solution in java——Easy5

    转载请注明原文地址: 21:Assign Cookies Assume you are an awesome parent and want to give your children some co ...

随机推荐

  1. 201621123040《Java程序设计》第3周学习总结

    1.本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词,如类.对象.封装等 面向对象的思想 对象 类 1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来. 掌握的还不够深 ...

  2. C语言--第一周作业(更改)

    *********************学习总结********************* 1.所用词典: 2.Git截图: *********************遇到的问题和解决方法***** ...

  3. scrapy crawl xmlfeed spider

    from scrapy.spiders import XMLFeedSpider from myxml.items import MyxmlItem class XmlspiderSpider(XML ...

  4. 《招一个靠谱的移动开发》iOS面试题及详解(下篇)

    iOS面试知识点 现在进入本篇的正题.本篇的面试题是我认为比较好的iOS开发基础知识点,希望大家看过这后在理解的基础上掌握而不是死记硬背.死记硬背很快也会忘记的. 1 iOS基础 1.1 父类实现深拷 ...

  5. jvm垃圾收集器总结jdk1.7

    内存 ● 线程私有:程序计数器,虚拟机栈,本地方法栈 ● 线程共享: 方法区,堆 判断存活算法 ● 引用计数法:无法解决循环引用问题. ● 可达性分析算法: 从GCRoot作为起始点,向下搜索,经过的 ...

  6. python之路--day11---迭代器和生成器

    迭代: 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 为什么要有迭代器: 数据类型的取值,字符串,列表,元组依靠索引可以取值,但是字典,集合,文件这些数据类型无法 ...

  7. 第四章 使用jQuery操作DOM

    第四章 使用jQuery操作DOM 一.DOM操作 在jQuery中的DOM操作主要可分为样式操作.文本和value属性值操作.节点操作: 节点操作又包含属性操作.节点遍历和CSS-DOM操作. 其中 ...

  8. ( 转 ) 聊一聊C#的Equals()和GetHashCode()方法

    聊一聊C#的Equals()和GetHashCode()方法   博客创建一年多,还是第一次写博文,有什么不对的地方还请多多指教. 关于这次写的内容可以说是老生长谈,百度一搜一大堆.大神可自行绕路. ...

  9. Linq 生成运算符 Empty,Range,Repeat

    var c1 = Enumerable.Empty<string>();//c1.Count=0 , );//{9527,9528,9529,......9536} , );//{9527 ...

  10. SpringCloud的微服务网关:zuul(理论)

    参考链接:https://springcloud.cc/spring-cloud-dalston.html 一.概念与定义 1.为什么要引入API网关 后期维护:路由规则和服务实例列表困难 系统架构: ...