1001

思路:打表可以发现只有3|n 和 4|n 的情况有解,判一下就好啦。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = 1e5 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +; LL n;
int main() { int T; scanf("%d", &T);
while(T--) {
scanf("%lld", &n);
if(n % == ) {
LL ans = n / ;
printf("%lld\n", ans * ans * ans);
} else if(n % == ) {
LL ans = n / ;
printf("%lld\n", ans * ans * (ans + ans));
} else {
puts("-1");
}
} return ;
} /*
*/

1003

思路:按x轴排序,按三个三个的顺序输出即可。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = 1e5 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +; struct Point {
int x, y, id;
bool operator < (const Point &rhs) const {
if(x == rhs.x) return y < rhs.y;
return x < rhs.x;
}
} p[N]; int n;
int main() { int T; scanf("%d", &T);
while(T--) {
scanf("%d", &n);
n *= ;
for(int i = ; i <= n; i++) {
scanf("%d%d", &p[i].x, &p[i].y);
p[i].id = i;
} sort(p + , p + + n); for(int i = ; i <= n; i += ) {
printf("%d %d %d\n", p[i].id, p[i + ].id, p[i + ].id);
}
}
return ;
} /*
*/

1011

思路:直接模拟,队友写的。

#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int h,m;
scanf("%d%d",&h,&m); char t[];
int lateh=,latem=;
scanf("%s",t);
int len=strlen(t); bool point=false; int pos; for(int i=;i<len;i++)
{
if(t[i]=='.'){
point=true;
pos=i;
}
}
if(point){
for(int i=;i<pos;i++)
{
lateh*=;
lateh+=t[i]-'';
}
for(int i=pos+;i<len;i++)
{
latem*=;
latem+=t[i]-'';
}
}
else{
for(int i=;i<len;i++)
{
lateh*=;
lateh+=t[i]-'';
}
} h+=;
h%=; if(t[]=='+')
{
h+=lateh;
h%=;
m+=*latem;
h+=m/;
h%=;
m%=;
}
else{
h+=;
h-=lateh; if(m<latem*)
{
h--;
m+=;
m-=latem*;
}
else{
m-=latem*;
} h%=; }
printf("%02d:%02d\n",h,m);
}
}
/*
3
11 11 UTC+8
11 12 UTC+9
11 23 UTC+0
*/

1004

思路:贪心取,把包含于别的线段的线段去掉,用set维护一个可用集, 每条线段结束恢复可以再用的数字。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = 1e5 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +; int n, m, tot, ans[N], num[N];
struct Line {
int l, r;
bool operator < (const Line &rhs) const {
if(l == rhs.l) return r > rhs.r;
return l < rhs.l;
}
} a[N], b[N];
set<int> st; int main() { int T; scanf("%d", &T);
while(T--) {
tot = ; st.clear();
scanf("%d%d", &n, &m); for(int i = ; i <= n; i++) st.insert(i), num[i] = ans[i] = ; for(int i = ; i <= m; i++) {
scanf("%d%d", &a[i].l, &a[i].r);
} sort(a + , a + + m);
b[tot++] = a[]; for(int i = ; i <= m; i++) {
if(a[i].r <= b[tot - ].r) continue;
b[tot++] = a[i];
} for(int i = ; i < tot; i++) {
num[b[i].r + ] -= ;
num[b[i].l] += ;
} for(int i = ; i <= n; i++) num[i] += num[i - ]; // puts("");
// for(int i = 1; i <= n; i++) printf("%d ", num[i]);
// puts(""); int ptr = , cnt = ;
b[tot].l = inf, b[tot].r = inf + ; for(int i = ; i <= n; i++) { while(ptr < tot && i > b[ptr].r) {
for(int j = b[ptr].l; j < b[ptr + ].l && j <= b[ptr].r; j++) {
// if(ans[j] == 2) cout << i << endl;
st.insert(ans[j]);
}
ptr++;
} ans[i] = *st.begin(); if(num[i]) {
st.erase(st.begin());
} } printf("%d", ans[]);
for(int i = ; i <= n; i++) printf(" %d", ans[i]);
puts("");
}
return ;
} /*
10
10 3
1 5
2 7
4 8
*/

1002

队友后面一直在写的题目,瞎贪心就过了,正解好像是先按前边段长还是后半段长分成两类,然后类以内再排序。

//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000007
#define ld long double
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define Max(a, b) ((a)>(b)?(a):(b))
#define Min(a, b) ((a)<(b)?(a):(b))
#define fio ios::sync_with_stdio(false);cin.tie(0)
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
inline void sub(ll &a,ll b){a-=b;if(a<)a+=mod;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll qp(ll a,ll b){ll ans=;while(b){if(b&)ans=ans*a%mod;a=a*a%mod,b>>=;}return ans;} using namespace std; const double eps=1e-;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=+,maxn=+,inf=0x3f3f3f3f; char s[N];
pii p[N],pp[N];
bool cmp1(pii a,pii b){return a.fi>b.fi||a.fi==b.fi&&a.se>b.se;}
bool cmp2(pii a,pii b){return a.fi>b.fi||a.fi==b.fi&&a.se<b.se;}
bool cmp3(pii a,pii b){return a.fi<b.fi||a.fi==b.fi&&a.se>b.se;}
bool cmp4(pii a,pii b){return a.fi<b.fi||a.fi==b.fi&&a.se<b.se;}
int main()
{
int T;
while(~scanf("%d",&T))
{
while(T--)
{
int n;scanf("%d",&n);
int ans=,ans1=,ans2=; for(int i=;i<n;i++)
{
scanf("%s",s);
int len=strlen(s),l=,r=;
for(int j=;j<len;j++)
{
if(s[j]==')')
{
if(l!=)l--,ans+=;
else r++;
}
else l++;
}
p[i]=mp(l,r);
}
for(int i=;i<n;i++)pp[i]=p[i];
int res=,ma=;
sort(p,p+n,cmp1);
for(int i=;i<n;i++)
{
if(min(p[i].fi,p[i-].se)>min(p[i].se,p[i-].fi))
{
res+=*min(p[i].fi,p[i-].se);
if(p[i].fi>p[i-].se)
p[i]=mp(p[i].fi-p[i-].se+p[i-].fi,p[i].se);
else p[i]=mp(p[i-].fi,p[i-].se-p[i].fi+p[i].se);
}
else
{
res+=*min(p[i].se,p[i-].fi);
if(p[i].se>p[i-].fi)
p[i]=mp(p[i].fi,p[i].se-p[i-].fi+p[i-].se);
else p[i]=mp(p[i-].fi-p[i].se+p[i].fi,p[i-].se);
}
}
ma=max(ma,res);
for(int i=;i<n;i++)p[i]=pp[i];
res=;
sort(p,p+n,cmp2);
for(int i=;i<n;i++)
{
if(min(p[i].fi,p[i-].se)>min(p[i].se,p[i-].fi))
{
res+=*min(p[i].fi,p[i-].se);
if(p[i].fi>p[i-].se)
p[i]=mp(p[i].fi-p[i-].se+p[i-].fi,p[i].se);
else p[i]=mp(p[i-].fi,p[i-].se-p[i].fi+p[i].se);
}
else
{
res+=*min(p[i].se,p[i-].fi);
if(p[i].se>p[i-].fi)
p[i]=mp(p[i].fi,p[i].se-p[i-].fi+p[i-].se);
else p[i]=mp(p[i-].fi-p[i].se+p[i].fi,p[i-].se);
}
}
for(int i=;i<n;i++)p[i]=pp[i];
ma=max(ma,res);
res=;
sort(p,p+n,cmp3);
for(int i=;i<n;i++)
{
if(min(p[i].fi,p[i-].se)>min(p[i].se,p[i-].fi))
{
res+=*min(p[i].fi,p[i-].se);
if(p[i].fi>p[i-].se)
p[i]=mp(p[i].fi-p[i-].se+p[i-].fi,p[i].se);
else p[i]=mp(p[i-].fi,p[i-].se-p[i].fi+p[i].se);
}
else
{
res+=*min(p[i].se,p[i-].fi);
if(p[i].se>p[i-].fi)
p[i]=mp(p[i].fi,p[i].se-p[i-].fi+p[i-].se);
else p[i]=mp(p[i-].fi-p[i].se+p[i].fi,p[i-].se);
}
}
for(int i=;i<n;i++)p[i]=pp[i];
ma=max(ma,res);
res=;
sort(p,p+n,cmp4);
for(int i=;i<n;i++)
{
if(min(p[i].fi,p[i-].se)>min(p[i].se,p[i-].fi))
{
res+=*min(p[i].fi,p[i-].se);
if(p[i].fi>p[i-].se)
p[i]=mp(p[i].fi-p[i-].se+p[i-].fi,p[i].se);
else p[i]=mp(p[i-].fi,p[i-].se-p[i].fi+p[i].se);
}
else
{
res+=*min(p[i].se,p[i-].fi);
if(p[i].se>p[i-].fi)
p[i]=mp(p[i].fi,p[i].se-p[i-].fi+p[i-].se);
else p[i]=mp(p[i-].fi-p[i].se+p[i].fi,p[i-].se);
}
}
for(int i=;i<n;i++)p[i]=pp[i];
printf("%d\n",ans+ma);
}
}
return ;
}
/***********************
100000
4
)))
)))
)(
(((
***********************/

补题:

1006

我后面一个半小时都在写这道题。。 我先打了个表,发现找不到规律,然后拉过来我的找规律队友,分分钟

找出来了,每个数字出现自身有的2这个因子的个数次。 然后我就开始码,二分找出最后一个数对应值,然后

算答案,复杂度(logn) ^ 2, 然后被卡T了。。(别人居然没有T。。),然后开始扣log,发现最后一个数值在

n/2附近,缩小二分的范围,交上去发现,hdu炸掉了。。 然后多改了几次范围交了很多次。最后死于有一个

地方没有取模。。  想了想好像确实是我的锅,难受。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int> using namespace std; const int N = 1e5 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +; LL n, ivn2, bin[];
//LL a[N], sum[N];
void add(LL &a, LL b) {
a += b; if(a >= mod) a -= mod;
} LL fastPow(LL a, LL b) {
LL ans = ;
while(b) {
if(b & ) ans = ans * a % mod;
a = a * a % mod; b >>= ;
}
return ans;
} LL check(LL x) {
LL ans = ;
for(int i = ; i <= ; i++) {
ans += x / bin[i];
if(ans >= n - ) return true;
}
return ans >= n - ;
} LL cal(LL x) {
LL ans = ;
for(int i = ; i <= ; i++) {
ans += x / bin[i];
}
return ans;
} int main() { ivn2 = fastPow(, mod - );
bin[] = ;
for(int i = ; i <= ; i++) bin[i] = bin[i - ] * ; LL q = ; int T; scanf("%d", &T);
while(T--) {
scanf("%lld", &n);
if(n == ) {
puts("");
continue;
} LL l = max(1ll, n / - ), r = min(n, n / + ), mid, ret = -; while(l <= r) {
mid = l + r >> ;
if(check(mid)) ret = mid, r = mid - ;
else l = mid + ;
} LL num = ret - , now = ;
for(int i = ; i <= ; i++) {
if(bin[i] > num) break;
LL cnt = num / bin[i];
cnt %= mod;
add(now, bin[i] % mod * (cnt + ) % mod * (cnt) % mod * ivn2 % mod);
} add(now, (n - - cal(num)) % mod * ret % mod); printf("%lld\n", ( + now) % mod);
}
return ;
} /*
100000
1000000000000000000
*/

1008

构造笛卡尔树,算贡献。。。 学习了一波笛卡尔树。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = 1e6 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +; int l[N], r[N], vis[N], stk[N], sum[N], inv[N], n;
pii a[N]; LL ans;
void dfs(int u) {
sum[u] = ;
if(l[u]) dfs(l[u]), sum[u] += sum[l[u]];
if(r[u]) dfs(r[u]), sum[u] += sum[r[u]];
ans = ans * inv[sum[u]] % mod;
} void build() {
int top = ;
for(int i = ; i <= n; i++)
l[i] = , r[i] = , vis[i] = ;
for(int i = ; i <= n; i++)
{
int k = top;
while(k > && a[stk[k - ]] > a[i]) k--;
if(k) r[stk[k - ]]=i;
if(k < top) l[i] = stk[k];
stk[k++]=i;
top = k;
}
for(int i=; i<=n; i++)
vis[l[i]] = vis[r[i]] = ;
int rt=;
for(int i=; i<=n; i++)
if(vis[i]==) rt=i;
dfs(rt);
} void init() {
inv[] = ;
for(int i = ; i < N; i++) {
inv[i] = (mod - mod / i) * 1ll * inv[mod % i] % mod;
}
}
int main() { init();
int T; scanf("%d", &T);
while(T--) {
ans = ;
scanf("%d", &n);
for(int i = ; i <= n; i++) {
int x; scanf("%d", &x);
a[i].fi = -x;
a[i].se = i;
sum[i] = ;
} build(); printf("%lld\n", ans * n % mod * inv[] % mod);
}
return ;
} /*
*/

hdu 多校第一场的更多相关文章

  1. hdu多校第一场 1006 (hdu6583)Typewriter dp/后缀自动机

    题意: 有个打字机,在当前字符串后新加一个字花费p,把当前字符串的一个连续子串拷贝到当前字符串的末尾花费q,给定一个字符串,求用打字机打出这个字符串的最小花费. 题解: 容易想到用dp 记dp[i]为 ...

  2. hdu多校第一场1003 (hdu6580)Milk 背包

    题意: 有一个n*m的矩阵,左右可以随便走,但只能在每一行的中点往下走,每走一格花费时间1. 现在这个矩阵里放了k瓶牛奶,第i个牛奶喝下去需要ti时间 起点是(1,1) 对于每个i∈[1,k],问喝掉 ...

  3. hdu多校第一场1005(hdu6582)Path 最短路/网络流

    题意: 在无向图上删边,让此图上从起点到终点的最短路长度变大,删边的代价是边长,求最小代价. 题解: 先跑一遍迪杰斯特拉,求出所有点的d[]值,然后在原图上保留所有的边(i,j)仅当i,j满足d[j] ...

  4. hdu多校第一场1004(hdu6581)Vacation 签到

    题意:有n+1辆车,每辆车都有一定的长度,速度和距离终点的距离,第1-n辆车在前面依次排列,第0辆车在最后面.不允许超车,一旦后车追上前车,后车就减速,求第0辆车最快什么时候能到达终点? 思路:对于每 ...

  5. hdu多校第一场 1013(hdu6590)Code 凸包交

    题意: 给定一组(x1,x2,y),其中y为1或0,问是否有一组(w1,w2,b),使得上述的每一个(x1,x2,y)都满足x1*w1+x2*w2+b在y=1时大于0,在y=-1时小于0. 题解: 赛 ...

  6. HDU6581 Vacation (HDU2019多校第一场1004)

    HDU6581 Vacation (HDU2019多校第一场1004) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6581 题意: 给你n+1辆汽车, ...

  7. 2019牛客多校第一场 I Points Division(动态规划+线段树)

    2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...

  8. 牛客多校第一场 B Inergratiion

    牛客多校第一场 B Inergratiion 传送门:https://ac.nowcoder.com/acm/contest/881/B 题意: 给你一个 [求值为多少 题解: 根据线代的知识 我们可 ...

  9. 2019年牛客多校第一场B题Integration 数学

    2019年牛客多校第一场B题 Integration 题意 给出一个公式,求值 思路 明显的化简公式题,公式是分母连乘形式,这个时候要想到拆分,那如何拆分母呢,自然是裂项,此时有很多项裂项,我们不妨从 ...

随机推荐

  1. 题解【bzoj4653 [NOI2016] 区间】

    先按照长度排个序,然后依次添加区间.什么是添加?设这个区间是\([l,r]\),添加就是把\(a_l,a_{l+1},a_{l+2},{...},a_{r}\)都加上\(1\),其中\(a_i\)表示 ...

  2. SSH客户端,FinalShell服务器管理,远程桌面加速软件,支持Windows,Mac OS X,Linux,版本2.6.3.1

    FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求. 用户QQ群 342045988 Windows版下载地址:http:/ ...

  3. margin和padding

    一.margin基础语法与结构 1.margin语法 Margin:10px Margin的值是数字+html单位,同时也可以为auto(自动.自适应) 2.应用结构 Div{margin:10px} ...

  4. (译)理解python线程

    看到一篇老外写的线程文章,很赞,零基础都能看懂.先贴在这里,有时间再翻译出来. http://agiliq.com/blog/2013/09/understanding-threads-in-pyth ...

  5. j2ee 项目部署指引

    j2ee相关的项目一般是web工程或java application,部署到linux服务器上,本文结合自己的经验.教训,总结下部署的过程. 一.准备阶段 部署前要做的事情: 1.明确自己的产品都包含 ...

  6. cookie与session的区别与应用

    通常我们所说的浏览器自动保存密码,下次不用登陆,提示一次就不再出现的内容,大部分通过cookie或者session来实现的. cookie的概念 cookie是浏览器(User Agent)访问一些网 ...

  7. IT培训班123

    最近20年,IT行业一直处于上升期,程序员的工资越来越高了,年薪几十万的程序员大有人在.根据国家统计局发布的2016年各行业平均工资报表,程序员已经是工资最高的一个群体,超过了金融行业. IT行业的火 ...

  8. Spring注解@Resource和@Autowired区别对比、spring扫描的默认bean的Id、程序获取spring容器对象

    -------------------------注解扫面的bean的ID问题-------------------------- 0.前提需要明白注解扫描出来的bean的id默认是类名首字母小写,当 ...

  9. github新建托管项目及上传项目

    一.新建托管项目 1.注册: 2.点击new repositories新建一个新项目: 3.输入项目名称及项目描述,Create repository: 4.点击右边栏的剪切板图标,记录下你的项目地址 ...

  10. POJ1014(多重背包)

    Dividing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65044   Accepted: 16884 Descri ...