codeforces gym-101078
题目链接:
http://codeforces.com/gym/101078
A:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <bits/stdc++.h>
#include <stack>
#include <map> using namespace std; #define For(i,j,n) for(int i=j;i<=n;i++)
#define mst(ss,b) memset(ss,b,sizeof(ss));
#define ll long long;
typedef long long LL; template<class T> void read(T&num) {
char CH; bool F=false;
for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
F && (num=-num);
}
int stk[70], tp;
template<class T> inline void print(T p) {
if(!p) { puts("0"); return; }
while(p) stk[++ tp] = p%10, p/=10;
while(tp) putchar(stk[tp--] + '0');
putchar('\n');
} const LL mod=1e9+7;
const double PI=acos(-1.0);
const LL inf=1e18;
const int N=1e6+2000;
const int maxn=1e5+5;
const double eps=1e-8; int a[maxn],p[maxn];
int main()
{
int t;
read(t);
while(t--)
{
int n;
read(n);
For(i,1,n)
{
read(a[i]);
p[a[i]]=i;
}
int st=0,mmax=0,x;
For(i,1,n)
{
read(x);
mmax=max(mmax,p[x]);
if(i==mmax)
{
printf("%d-%d ",st+1,i);
st=i;
}
}
printf("\n");
}
return 0;
} /*
题意:
给两个[1,n]的排列,现在要给分成几部分,每一部分里面都是数字相同,现在要怎么分; 思路: 水题啦啦;
*/
B:
C:
D:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <bits/stdc++.h>
#include <stack>
#include <map> using namespace std; #define For(i,j,n) for(int i=j;i<=n;i++)
#define mst(ss,b) memset(ss,b,sizeof(ss));
#define ll long long;
typedef long long LL; template<class T> void read(T&num) {
char CH; bool F=false;
for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
F && (num=-num);
}
int stk[70], tp;
template<class T> inline void print(T p) {
if(!p) { puts("0"); return; }
while(p) stk[++ tp] = p%10, p/=10;
while(tp) putchar(stk[tp--] + '0');
putchar('\n');
} const LL mod=1e9+7;
const double PI=acos(-1.0);
const LL inf=1e18;
const int N=1e6+2000;
const int maxn=5e3+10;
const double eps=1e-8; int main()
{
int t;
read(t);
while(t--)
{
LL n;
read(n);
if(n==0){cout<<"0\n";continue;}
LL ans=n-n/2;
for(int i=1;i<=3;i++)
{
if((n+i-1)%3==0)
{
LL t=(n+i-1)/3;
if(t%2==0)t++;
ans=ans+(n-t)/2+1;
break;
}
}
print(ans);
}
return 0;
} /*
题意:
每个数m和2*m之间都有一根绳,每个奇数m和3*m+1之间有一根绳,现在要把[1,n]拿走,需要剪断多少根绳; 思路: 这个就是个水题,把2*m>n的减去,把3*m+1>n的剪去就是答案了;
*/
E:
F:
G:
H:
I:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <bits/stdc++.h>
#include <stack>
#include <map> using namespace std; #define For(i,j,n) for(int i=j;i<=n;i++)
#define mst(ss,b) memset(ss,b,sizeof(ss));
#define ll long long;
typedef long long LL; template<class T> void read(T&num) {
char CH; bool F=false;
for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
F && (num=-num);
}
int stk[70], tp;
template<class T> inline void print(T p) {
if(!p) { puts("0"); return; }
while(p) stk[++ tp] = p%10, p/=10;
while(tp) putchar(stk[tp--] + '0');
putchar('\n');
} const LL mod=1e9+7;
const double PI=acos(-1.0);
const LL inf=1e18;
const int N=1e6+2000;
const int maxn=1e6+5;
const double eps=1e-8; char s[maxn];
int p,sz;
struct node
{
char ch;
int l,r;
}po[N];
void movele()
{
if(p==0)return ;
p=po[p].l;
}
void moveri()
{
if(po[p].r==0)return ;
p=po[p].r;
}
void insert(char &t)
{
sz++;
po[sz].ch=t;
po[sz].l=p;
po[sz].r=po[p].r;
po[p].r=sz;
if(po[sz].r)po[po[sz].r].l=sz;
p=sz;
}
void dele()
{
if(p==0)return ;
if(po[p].r)
{
int nex=po[p].r;
int pre=po[p].l;
po[nex].l=pre;
po[pre].r=nex;
p=pre;
}
else
{
int pre=po[p].l;
po[pre].r=0;
p=pre;
}
}
void out()
{
p=po[0].r;
while(p)
{
printf("%c",po[p].ch);
p=po[p].r;
}
printf("\n");
}
int main()
{
int t;
read(t);
while(t--)
{
gets(s);
int len=strlen(s);
sz=0;p=sz;
po[0].l=0;po[0].r=0;
for(int i=0;i<len;i++)
{
if(s[i]=='<')movele();
else if(s[i]=='>')moveri();
else if(s[i]=='-')dele();
else insert(s[i]);
}
out();
}
return 0;
} /*
题意:
模拟几项操作,最后输出密码,其中<表示光标左移一位,>表示右移一位,-表示删除一位,其他的字符就表示插入一个字符,
这些操作都是在可以操作的情况下才执行; 思路: 用一个双向链表模拟一下,我不太会写链表,就用结构体代替啦;
*/
J:
K:
L:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <bits/stdc++.h>
#include <stack>
#include <map> using namespace std; #define For(i,j,n) for(int i=j;i<=n;i++)
#define mst(ss,b) memset(ss,b,sizeof(ss));
#define ll long long;
typedef long long LL; template<class T> void read(T&num) {
char CH; bool F=false;
for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
F && (num=-num);
}
int stk[70], tp;
template<class T> inline void print(T p) {
if(!p) { puts("0"); return; }
while(p) stk[++ tp] = p%10, p/=10;
while(tp) putchar(stk[tp--] + '0');
putchar('\n');
} const LL mod=1e9+7;
const double PI=acos(-1.0);
const LL inf=1e18;
const int N=1e6+2000;
const int maxn=5e3+10;
const double eps=1e-8; char s[maxn];
int main()
{
scanf("%s",s);
int len=strlen(s);
double ans=0;
for(int i=len-1;i>=0;i--)
{
if(s[i]=='0')
{
for(int j=0;j<=i;j++)
{
if(s[j]=='1')
{
swap(s[i],s[j]);
ans=ans+sqrt(i-j);
break;
}
}
}
}
printf("%.12lf\n",ans);
return 0;
} /*
题意:
给出一个01串,让把0都换到前边来,每次交换位置i和j的花费为sqrt(i-j);问最小的花费是多少; 思路:
假设现在位置i<j<x<y,i,j为1,x,y为1,sqrt(x-j)+sqrt(y-i)<sqrt(x-i)+sqrt(y-j),
这个大小关系可以通过平方啊比较出来,然后就是最外面的10一块交换花费最小,所以就这样贪心就好;
*/
codeforces gym-101078的更多相关文章
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
- Codeforces Gym 101623A - 动态规划
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...
- 【Codeforces Gym 100725K】Key Insertion
Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...
- Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】
2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...
- codeforces gym 100553I
codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...
- CodeForces Gym 100213F Counterfeit Money
CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...
- Codeforces GYM 100876 J - Buying roads 题解
Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...
- codeforces Gym 100187J J. Deck Shuffling dfs
J. Deck Shuffling Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...
- Codeforces Gym 100187K K. Perpetuum Mobile 构造
K. Perpetuum Mobile Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...
随机推荐
- eclipse中的web项目路径和发布好的项目路径
现在企业开发中,我们都会创建一个javaWeb工程,在eclipse中指的是新建一个dynamic web project,创建完工程之后,我们在IDE中大体看到如下的工程目录: 我们主要关心的文件夹 ...
- [maven] 生命周期和插件
maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...
- 关于iChartjs在移动端提示框tip显示不正常的解决方法
最近项目需要使用手机图表,但是找了很久都没找到专门为移动端开发的图表,只能找一些能兼容移动端的图表控件,今天就讲讲关于iChartjs这个图形库的一点问题. 问题 iChartjs的提示框tip的显示 ...
- Javascript的封装
js的封装分为以下几种模式: 工厂模式,代码如下: <!doctype html><html lang="en"><head><meta ...
- Vue入门演示
工作中用了很久vue,但是都是我们这边前端经理封装好的组件,想要看到底部的原理还要从层层代码里面剥离出来,逻辑太复杂,还不如自己一点点整理一下,一步一步走下去. github地址:https://gi ...
- JS数组的forEach方法(兼容所有浏览器)
//->自己在内置类的原型上扩展一个myForEach来处理forEach不兼容的问题//callBack:回调函数,遍历数组中的一项,就要执行一次callBack//context:改变cal ...
- 高性能JS笔记2——数据存取
数据存取性能而言: 字面量>本地变量>数组元素>对象成员 一.标识符解析的性能 标识符解析是有代价的,一个标识符的位置越深,它的读写速度也就越慢. 局部变量的读写速度是最快的,全局变 ...
- 迭代器iterator(三):Listlterator遍历arraylist,并用逆序输出结果
迭代器(iterator) 是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址.迭代器修改了常规指针的接口,所谓迭代器是一种概 念上的抽象:那些行为上像迭 ...
- RecyclerView解析--onViewDetachedFromWindow()/onViewAttachedToWindow()
先看这段源码介绍: /** * Called when a view created by this adapter has been detached from its window. * * &l ...
- 打印 SpringMVC中所有的接口URL
采用junit test方式 1.配置 simple-test.xml <?xml version="1.0" encoding="UTF-8"?&g ...