题还没补完

以下是牢骚:删了

现在只有六个。。。太恐怖了,我发现四星场我连300人的题都不会啊。

C:最短路加一维状态就好了叭。。嗯,一开始没看到输出的那句话 那个  "."也要输出,然后n,m看反了,这反人类啊这nm。

#include <bits/stdc++.h>
#define mk(a,b) make_pair(a,b)
#define pii pair<int,int>
using namespace std;
typedef long long ll;
struct node{
int u,t,p;
bool operator<(const node&rhs)const {
return p>rhs.p;
}
};
int x,n,m,l;
vector<int>g[];
int t[],p[],dis[][];
void Dijkstra(){
for(int i=;i<=n;i++)for(int j=;j<=x;j++)dis[i][j]=;
if(t[]>x)return;
dis[][t[]]=p[];
priority_queue<node>Q;
Q.push(node{,t[],p[]});
while (!Q.empty()){
node fr = Q.top();Q.pop();
if(dis[fr.u][fr.t]<fr.p)continue;
if(fr.t+t[fr.u]<=x&&fr.p+p[fr.u]<dis[fr.u][fr.t+t[fr.u]]){
dis[fr.u][fr.t+t[fr.u]]=fr.p+p[fr.u];
Q.push(node{fr.u,fr.t+t[fr.u],fr.p+p[fr.u]});
}
for(auto u:g[fr.u]){
if(fr.t+t[u]+l<=x&&fr.p+p[u]<dis[u][fr.t+t[u]+l]) {
dis[u][fr.t+t[u]+l]=fr.p+p[u];
Q.push(node{u, fr.t + t[u] + l, fr.p + p[u]});
}
}
}
}
int main(){
ios::sync_with_stdio(false);
cin>>x>>n>>m>>l;
int a,b;
for(int i=;i<=m;i++){
cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
for(int i=;i<=n;i++){
cin>>t[i]>>p[i];
}
Dijkstra();
if(dis[][x]==)cout<<"It is a trap."<<endl;
else cout<<dis[][x]<<endl;
}

D:签到,我写的很傻逼

 #include <bits/stdc++.h>
#define mk(a,b) make_pair(a,b)
#define pii pair<int,int>
using namespace std;
typedef long long ll;
string s1,s2,s;
int n,m,cnt=,vis[];
map<string,int>mp;
vector<int>g[];
set<int> st[];
void dfs(int v){
st[v].insert(v);
for(auto u:g[v]){
dfs(u);
for(auto tmp:st[u])
st[v].insert(tmp);
}
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
while (n--){
cin>>s1>>s>>s>>s>>s2;
if(!mp.count(s1))mp[s1]=cnt++;
if(!mp.count(s2))mp[s2]=cnt++;
g[mp[s2]].push_back(mp[s1]);
}
for(int i=;i<cnt;i++){
if(!vis[i])
dfs(i);
}
while (m--){
cin>>s1>>s>>s>>s>>s2;
if(!mp.count(s1)||!mp.count(s2)){
cout<<"Pants on Fire"<<endl;
} else{
if(st[mp[s2]].count(mp[s1])){
cout<<"Fact"<<endl;
} else if(st[mp[s1]].count(mp[s2])){
cout<<"Alternative Fact"<<endl;
} else{
cout<<"Pants on Fire"<<endl;
}
}
}
}

G:现学的那个什么皮克公式。好神奇啊!虽然不知道为什么。然后仔细读题会发现他给你的点是按顺序的。算一下叉积就完了。可以百度 皮克公式呀qwq

 #include <bits/stdc++.h>
#define mk(a,b) make_pair(a,b)
#define pii pair<int,int>
using namespace std;
typedef long long ll;
int n;
struct point{
ll x,y;
}p[];
ll cross(point k1,point k2){return k1.x*k2.y-k1.y*k2.x;}
ll gcd(ll a,ll b){
a=abs(a);b=abs(b);
if(a==)return b;
if(b==)return a;
return __gcd(a,b);
}
int main(){
//ios::sync_with_stdio(false);
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%lld%lld",&p[i].x,&p[i].y);
ll S=,cnt=;
for(int i=;i<n;i++){
S+=cross(p[i],p[(i+)%n]);
}
S/=;
S=abs(S);
for(int i=;i<n;i++){
cnt+=gcd(p[i].x-p[(i+)%n].x,p[i].y-p[(i+)%n].y);
}
ll a = S-cnt/+;
printf("%lld\n",a);
}
/**
4
0 0
0 10
10 10
10 0 4
0 3
3 0
0 -1
-1 0
*/

F:哇上来我一看,这直接枚举不就完了吗!TLE ON TEST 8。说好的玄学复杂度呢呜呜呜  自闭。 后来想到会有大量重复的过程,,但是我学艺不精,写的最大流,就不会改了。。昨天看了题解!

哇!二分图匹配,然后每个点再做两次增广!用另外一个数组把一开始的存下来。草!这题竟该死的巧妙。匈牙利大法好哇。

 #include <bits/stdc++.h>
using namespace std;
const int N = 1e5+;
const int INF = 0x3f;
struct Edge{
int u,v,nxt;
Edge(int u=,int v=,int nxt=):u(u),v(v),nxt(nxt){}
}edge[*N];
int n,m,k,cnt;
int head[N],d[N],c[N];
void addEdge(int u,int v){
edge[++cnt]=Edge(u,v,head[u]);
head[u]=cnt;
}
int match[N],vis[N],tmp[N];
bool dfs(int u){
for(int i=head[u];~i;i=edge[i].nxt){
int v = edge[i].v;
if(vis[v])continue;
vis[v]=;
if(match[v]==-||dfs(match[v])){
match[v]=u;
return true;
}
}
return false;
}
void init(){
memset(head,-, sizeof(head));
cnt=;
}
int main(){
ios::sync_with_stdio(false);
init();
scanf("%d%d%d",&n,&m,&k);
int u,v;
for(int i=;i<=k;i++){
scanf("%d%d",&u,&v);
addEdge(u,v);
}
int mx=;
memset(match,-, sizeof(match));
for(int i=;i<=n;i++){
memset(vis,, sizeof(vis));
if(dfs(i))mx++;
}
memcpy(tmp,match,sizeof(match));
int ans =;
for(int i=;i<=n;i++){
int num=;
while (dfs(i)&&num<){
memset(vis,, sizeof(vis));
num++;
}
ans=max(ans,num);
memcpy(match,tmp, sizeof(tmp));
}
printf("%d\n",ans+mx);
}

I:签到

 #include <bits/stdc++.h>
#define mk(a,b) make_pair(a,b)
#define pii pair<int,int>
using namespace std;
typedef long long ll;
const int N = 3e5+;
int n,m;
int a[N],dp[N][];
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=n;i++)cin>>a[i];
for(int i=m+;i<=n;i++){
dp[i][]=max(dp[i-m][],dp[i-m][])+a[i];
dp[i][]=max(dp[i-][],dp[i-][]);
}
cout<<max(dp[n][],dp[n][]);
}

K:签到

 #include <bits/stdc++.h>
#define mk(a,b) make_pair(a,b)
#define pii pair<int,int>
using namespace std;
typedef long long ll;
int n,d,k;
struct Node{
string s;
int c;
bool operator < (const Node& a)const {
return c<a.c;
}
};
priority_queue<Node> q;
vector<string>ans;
int main(){
ios::sync_with_stdio(false);
cin>>n>>d>>k;
string s;int c;
while (n--){
cin>>s>>c;
q.push(Node{s,c});
}
int sum=;
while (!q.empty()&&sum<d){
sum+=q.top().c;
ans.push_back(q.top().s);
q.pop();
}
if(ans.size()>k||sum<d){
cout<<"impossible"<<endl;
} else{
cout<<ans.size()<<endl;
for(auto s:ans){
cout<<s<< ", YOU ARE FIRED!"<<endl;
}
}
}

gym 101873的更多相关文章

  1. gym/101873/GCPC2017

    题目链接:https://codeforces.com/gym/101873 C. Joyride 记忆化搜索形式的dp #include <algorithm> #include < ...

  2. Gym 101873F Plug It In(二分图匹配)

    题目链接:http://codeforces.com/gym/101873/problem/F 题意:有n个插孔,m个机器,和一个插板,一个插孔可以连接一个机器,插板可以使一个插孔连接三个机器,找到最 ...

  3. Gym 101873C - Joyride - [最短路变形][优先队列优化Dijkstra]

    题目链接:http://codeforces.com/gym/101873/problem/C 题意: 这是七月的又一个阳光灿烂的日子,你决定和你的小女儿一起度过快乐的一天.因为她真的很喜欢隔壁镇上的 ...

  4. Gym 101873D - Pants On Fire - [warshall算法求传递闭包]

    题目链接:http://codeforces.com/gym/101873/problem/D 题意: 给出 $n$ 个事实,表述为 "XXX are worse than YYY" ...

  5. Gym 101873G - Water Testing - [皮克定理]

    题目链接:http://codeforces.com/gym/101873/problem/G 题意: 在点阵上,给出 $N$ 个点的坐标(全部都是在格点上),将它们按顺序连接可以构成一个多边形,求该 ...

  6. Gym 101873I - Uberwatch - [DP]

    题目链接:http://codeforces.com/gym/101873/problem/I 题意: 给出 $n(1 \le n \le 300000)$ 个单位时间,每个单位时间给出一个 $x_i ...

  7. Gym 101873K - You Are Fired - [贪心水题]

    题目链接:http://codeforces.com/gym/101873/problem/K 题意: 现在给出 $n(1 \le n \le 1e4)$ 个员工,最多可以裁员 $k$ 人,名字为 $ ...

  8. codeforces gym #101873B. Buildings(Polya定理)

    参考博客: https://blog.csdn.net/liangzhaoyang1/article/details/72639208 题目链接: https://codeforces.com/gym ...

  9. Joyride (spaf)

    题目链接:https://codeforces.com/gym/101873/problem/C spaf的复杂度有点迷,按道理来说,一个简单的spaf在这题的复杂度是1e9,所以不敢写,然后用优先队 ...

随机推荐

  1. mac上mysql8.0以tar.gz方式手动安装

    一.下载 官网地址: https://dev.mysql.com/downloads/mysql/ 选择:macOS 10.14 (x86, 64-bit), Compressed TAR Archi ...

  2. 让你的app在iPhoneX中全屏显示

    如果你的项目什么也不修改,直接把你的app运行在 iPhone X 模拟器下,很有可能就会出现下面的情形: 上下都有黑边,没有全屏显示 为了让app能够全屏显示,你需要准备以下的内容 Xcode 9. ...

  3. java/javac命令行如何同时引用多个包;错误 TypeError: 'JavaPackage' object is not callable 的含义

    出现这类错误提示:'JavaPackage' object is not callable,可以看下所引用的jar包或者class文件是否在java的路径搜索范围内 命令行模式下:javac可以编译* ...

  4. 06、action操作开发实战

    1.reduce: 2.collect: 3.count: 4.take: 5.saveAsTextFile: 6.countByKey: 7.foreach: package sparkcore.j ...

  5. 硬件工程师必会电路模块之MOS管应用

    实际工程应用中常用的MOS管电路(以笔记本主板经典电路为例): 学到实际系统中用到的开关电路模块以及MOS管非常重要的隔离电路(结合IIC的数据手册和笔记本主板应用电路): MOS管寄生体二极管,极性 ...

  6. 简单了解weblogic配置文件

    WebLogic的启动是通过启动文件来完成的 包括启动管理服务器(startWebLogic) 启动被管服务器(startManagedWebLogic) 设置域环境(setDomainEnv) 关闭 ...

  7. Go语言无锁队列组件的实现 (chan/interface/select)

    1. 背景 go代码中要实现异步很简单,go funcName(). 但是进程需要控制协程数量在合理范围内,对应大批量任务可以使用"协程池 + 无锁队列"实现. 2. golang ...

  8. SpringBoot(十三):springboot2.0.2定时任务

    使用定义任务: 第一步:启用定时任务第二步:配置定时器资源等第三步:定义定时任务并指定触发规则 1)启动类启用定时任务 在springboot入口类上添加注解@EnableScheduling即可. ...

  9. Lazarus 初识

    Lazarus 使用 Free Pascal 的编译器,支持 Object Pascal 语言,与 Delphi 高度兼容,并看做后者的自由软件替代品. Lazarus 下载与安装 我们先去 Laza ...

  10. Javascript 函数声明、函数表达式与匿名函数自执行表达式

    函数表达式(Function Expression)注:将函数定义为表达式语句(通常是变量赋值)的一部分 //func() 错误 var func = function () { } //func() ...