噩梦的回忆。。

上周日在机房打的模拟赛,结果十分惨烈,就最后一题yy出了正解结果玄学的只拿了80

考试结果:0+0+80=80

订正时对着T3打了2hours结果还是90

订正结果:100+100+90=290

我太弱了QAQ

T1 Luogu P5196 [USACO19JAN]Cow Poetry

题目链接

思路:dp+神奇的数学推导

快速幂一开始还写锅了,受到了ftq大佬的嘲笑

code

#include<bits/stdc++.h>
using namespace std;
const int MOD=1e9+7,MAXN=5000+10;
int f[5010][MAXN],s[MAXN],c[MAXN],g[MAXN],num[35],n,m,k;
long long ans,re=1;
long long pow(int b, int p) {
if (p == 0) {
return 1;
}
long long x = b;
long long ans = 1;
while (p > 0) {
if (p % 2 == 1) {
ans = ans * x % MOD;
}
x = x * x % MOD;
p = p >> 1;
}
return ans % MOD;
}
void debug()
{
for(int i=1;i<=5;++i){
cout<<f[k][i]<<" ";
}
cout<<endl;
for(int i=0;i<=5;++i){
cout<<num[i]<<" ";
}
cout<<endl;
}
signed main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>n>>m>>k;
for(int i=1;i<=n;++i){
cin>>s[i]>>c[i];
}
g[0]=1;
for(int i=1;i<=k;i++){
for(int j=1;j<=n;j++){
if(i-s[j]>=0){
(f[i][c[j]]+=g[i-s[j]])%=MOD;
(g[i]+=g[i-s[j]])%=MOD;
}
}
}
for(int i=1;i<=m;++i){
char ch;
cin>>ch;
num[ch-'A']++;
}
// debug();
for(int i=0;i<26;++i){
if(num[i]){
ans=0;
for(int j=1;j<=n;++j){
if(f[k][j]){
(ans+=pow(f[k][j],num[i]))%=MOD;
// cout<<ans<<endl; }
}
(re*=ans)%=MOD;
}
}
cout<<re<<endl;
return 0;
}

T2 Luogu P5200 [USACO19JAN]Sleepy Cow Sorting

题目链接

思路:神奇的推导+树状数组

code

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;
inline int lowbit(int x){return x&(-x);}
int ans[MAXN],num[MAXN],tree[MAXN],n,sum,k;
void add(int x)
{
for(int i=x;i<=n;i+=lowbit(i)){
tree[i]++;
}
}
int query(int x)
{
int re=0;
for(int i=x;i;i-=lowbit(i)){
re+=tree[i];
}
return re;
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>n;
for(int i=1;i<=n;++i){
cin>>num[i];
}
sum=n,k=0;
while(num[n-k]>num[n-k-1]){
add(num[n-k]);
sum--,k++;
}
add(num[n-k]);
sum--;
for(int i=1;i<=sum;++i){
add(num[i]);
ans[i]=sum-i+query(num[i]-1);
}
cout<<sum<<endl;
for(int i=1;i<=sum;++i){
cout<<ans[i]<<" ";
}
return 0;
}

T3 Luogu P5201 [USACO19JAN]Shortcut

思路:dij+最短路树

code

#include<bits/stdc++.h>
#define int long long
#define ll long long
using namespace std;
const int MAXN=1e5+10,INF=0x3f3f3f3f;
inline int read()
{
int s=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=s*10+ch-'0';
ch=getchar();
}
return s*f;
} struct NODE {
int first,second;
bool operator<(NODE b) const { return (b.first==first)?b.second<second:b.first < first; }
};
int cnt,Cnt,m,n,T;
int head[MAXN],Head[MAXN],from[MAXN],siz[MAXN],v[MAXN];
ll dist[MAXN],ans=0;
priority_queue <NODE > q;
bool vis[MAXN],vi[MAXN]; void debug()
{
puts("head Head from siz dist");
for(int i=1;i<=n;++i){
cout<<head[i]<<" "<<Head[i]<<" "<<from[i]<<" "<<siz[i]<<" "<<dist[i]<<endl;
}
} struct node{
int to,next,l;
}edge[MAXN];
void addedge(int x,int y,int l)
{
edge[++cnt].to=y;
edge[cnt].l=l;
edge[cnt].next=head[x];
head[x]=cnt;
} struct Node{
int to,next;
}Edge[MAXN];
void Addedge(int x,int y)
{
Edge[++Cnt].to=y;
Edge[Cnt].next=Head[x];
Head[x]=Cnt;
} void dij()
{
memset(dist,INF,sizeof(dist));
dist[1]=0;
NODE a;
a.first=0,a.second=1;
q.push(a);
while(!q.empty()){
NODE now=q.top();q.pop();
int x=now.second;
// if(vi[x])continue;
// vi[x]=1;
// cout<<x<<"while\n";
for(int i=head[x];i;i=edge[i].next){
// cout<<i<<"i\n";
int y=edge[i].to;
// cout<<y<<" y\n";
if(dist[x]+edge[i].l<dist[y]){
// cout<<y<<"y\n";
NODE aa;
aa.second=y,aa.first=dist[y];
dist[y]=dist[x]+edge[i].l;
from[y]=x;
// cout<<"to"<<y<<endl;
q.push(aa);
}
}
}
} void build()
{
for(int i=1;i<=n;++i){
Addedge(i,from[i]);
Addedge(from[i],i);
}
} int dfs(int x,int fa)
{
vis[x]=1;
siz[x]+=v[x];
for(int i=Head[x];i;i=Edge[i].next){
int y=Edge[i].to;
if(!vis[y]&&y!=fa){
siz[x]+=dfs(y,x);
}
}
return siz[x];
} signed main()
{
// freopen("test08.in","r",stdin);
// freopen("1.out","w",stdout);
cin>>n>>m>>T;
for(int i=1;i<=n;++i){
v[i]=read();
}
for(int i=1;i<=m;++i){
int x=read(),y=read(),t=read();
addedge(x,y,t);
addedge(y,x,t);
}
dij();
build();
dfs(1,0);
// debug();
for(int i=1;i<=n;++i){
ans=max(ans,siz[i]*(dist[i]-T));
}
cout<<ans<<endl;
return 0;
}

USACO19JAN Gold题解的更多相关文章

  1. [USACO19JAN]Shortcut题解

    本题算法:最短路树 这是个啥玩意呢,就是对于一个图,构造一棵树,使从源点开始的单源最短路径与原图一模一样.怎么做呢,跑一边Dijkstra,然后对于一个点u,枚举它的边,设当前的边为cur_edge, ...

  2. 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

    1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 510  S ...

  3. Gold Balanced Lineup POJ - 3274

    Description Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been abl ...

  4. codevs 2602 最短路径问题——良心题解

    2602 最短路径问题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在- ...

  5. LeetCode 1219. Path with Maximum Gold

    原题链接在这里:https://leetcode.com/problems/path-with-maximum-gold/ 题目: In a gold mine grid of size m * n, ...

  6. AC日记——楼房 codevs 2995

    2995 楼房  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 地平线(x轴)上有n个矩(lou ...

  7. AC日记——砍树 codevs 1388

    1388 砍树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 伐木工人米尔科需要砍倒M米长的木 ...

  8. AC日记——蓬莱山辉夜 codevs 2830

    2830 蓬莱山辉夜  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 在幻想乡中,蓬莱山辉夜是月球 ...

  9. AC日记——二叉堆练习3 codevs 3110

    3110 二叉堆练习3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 给定N(N≤500,000)和N个整 ...

随机推荐

  1. 纠错:Feign 没用 短连接

    Feign 默认不是 短连接 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大 ...

  2. IT兄弟连 Java语法教程 流程控制语句 分支结构语句5

    5  switch-case条件语句 Java中的第二种分支控制语句时switch语句,switch语句提供了多路支持,因此可以使程序在多个选项中进行选择.尽管一系列嵌套if语句可以执行多路测试,然而 ...

  3. allure定制化输出测试报告,让报告锦上添花!

    一.定制化后的效果展示 用两张图展示效果: 二.注意别踩坑 allure定制化想必大部分情况都会去选择pip install pytest-allure-adaptor这个插件,安装完成后,运行定制化 ...

  4. RPA中房产证的 OCR 识别

    客户需求,识别一些证件内容,包括身份证.户口本.营业执照.银行卡以及房产证,前四个比较容易实现,不管是艺赛旗的 RPA 还是百度的 OCR 都有接口,直接调用即可,但是都没有房产证的 OCR 识别,只 ...

  5. IntelliJ IDEA代码常用的快捷键(自查)

    IntelliJ IDEA代码常用的快捷键有: Alt+回车 导入包,自动修正 Ctrl+N   查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L  格式化代码 Ctrl+Alt+O ...

  6. pandas.read_sql_query()读取数据库数据用chunksize的坑

    最近一项工作需要读取数据库中1500万条数据,考虑到数据量太大,不方便直接一次性读取,不然会内存爆炸.想到用pandas.read_sql_query()里有一个chunksize可以分批返回chun ...

  7. Disruptor系列(三)— 组件原理

    前言 前两篇文章都是从github wiki中翻译而来,旨在能够快速了解和上手使用Disruptor.但是为了能够掌握该技术的核心思想,停留在使用层面还远远不够,需要了解其设计思想,实现原理,故这篇从 ...

  8. Spring核心(IoC) 入门解读

    什么是IoC容器和Bean? 说到容器,就是用来装东西,那么这里边装的是什么那?是bean对象.那么你会问什么是bean?这就要从很久很久以前说起,当我们创建对象的时候,我们会new一个对象出来,但是 ...

  9. abp实战-ContosoUniversity Abp版-2添加菜单与创建实体

    这里略过理论篇,但需要了解abp分层,对于小项目来说abp分层有点复杂,这里只是演示,个别地方没有完全按照ddd理论去写,后期我将会完善. 1. 创建ContosoUniversity相关功能的菜单 ...

  10. java基础第十四篇之Map

    一,Map集合的特点: *  * 1.Map集合和Collection集合,没有关系 *  * 2.Map集合的元素是成对存在(夫妻关系) *         Collection集合的元素是独立存在 ...