我饿死了,于是写写博客安慰一下即将退役的自己。

ZJ:

T1。

三种颜色,想到一道神奇的‘天空龙’。

于是觉得此题可做。

那好了。

于是切掉,还拿了一个暴力对拍。疯狂A。

啊dfs慢的要死了

T2一眼拓扑裸题。

但是读入很××。

于是拿出 getline(cin,st); 但是死了。

因为输入太……

后来一番倒饬过了样例。

T3丢了一个大暴力,然后发现根本不是图论题,是序列题=。=

然后就不会了。

最后T2就死了

为什么考输入啊????

30
Miemeng 100

00:00:03
0

00:00:04
20

00:00:05
120

00:00:05

TJ解:

T1:

这题我是贪心思路,但是可以证明是正确的。(但是我不想,所以大家感性理解吧)

首先将三种颜色一个一个一个卡在一起。

非常棒

然后一定会剩两种颜色(或是一种)

那么如果有两种,就用多的少的$2:1$加入锅中组合

好好看

然后就考虑剩下的了。

如果剩下的是比较多的那种,那么就可以每三个多的和一个三元的交换来使答案$++$

如果是比较少的那种,就可以将每三个和前面匹配的两种交换。

有个细节,如果多的那个剩一个,可以和下面的两个少的相结合也挺好的。

//decorate

#include <iostream>
#include <cstring>
#include <cstdio> using namespace std; int r,b,y;
void getsort(int &x,int &y,int &z){
if(x<y)swap(x,y);
if(y<z)swap(y,z);
if(x<y)swap(x,y);
}
int main(){
#ifndef LOCAL
freopen("decorate.in" ,"r",stdin);
freopen("decorate.out","w",stdout);
#endif
// while(cin>>r>>y>>b,getsort(r,y,b),cout<<r<<" "<<y<<" "<<b<<endl);
int T;
cin>>T;
while(T--){
scanf("%d%d%d",&r,&b,&y);
getsort(r,b,y);
// cout<<"Start:"<<r<<" "<<b<<" "<<y<<endl; int n_3=y;
r-=n_3,b-=n_3,y-=n_3;
// cout<<"3th_:"<<r<<" "<<b<<" "<<y<<endl; int n_2=min(r/2,b);
r-=n_2*2,b-=n_2; // cout<<"2th_:"<<r<<" "<<b<<" "<<y<<endl;
int swn=0;
if(b==0){
swn=min(n_3,r/3);
}
else if(r==1){
if(b>=2){
b-=2,r--;
swn++;
if(b>0){
swn+=min(n_2+n_3,b/3);
}
}
}
else{//b!=0 && r==0.
swn=min(n_2+n_3,b/3);
}
// cout<<n_3<<"+"<<n_2<<"+"<<swn<<endl;
cout<<n_3+n_2+swn<<endl;
}
}

T2

只考输入的题。

//dependency

#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#define N 333333
#define M 3333333 using namespace std;
const int Mod=5131111,Upbit=2411;//5477777
int id[Mod];
string st;
char dat[20]; struct SR{
int f,t,next;
}rs[M];
int pcnt,ecnt,fl[N],pn; struct Myqueue{
int A[M*5];
int f,b;
Myqueue(){f=b=0;}
void clear(){f=b=0;}
bool empty(){return f==b;}
void push(const int k){A[b++]=k;}
void pop(){f++;}
int front(){return A[f];}
}q;
int deg[N];
string thes;
int read(){
getline(cin,thes);
int d=0,n=0;
while((thes[d]<'0' || thes[d]>'9') && d<(int)thes.length())d++;
while(thes[d]>='0' && thes[d]<='9' && d<(int)thes.length()){
n=n*10+thes[d]-'0';
d++;
}
return n;
}
void add(int f,int t){
// cout<<f<<"->"<<t<<endl;
rs[ecnt].f=f;
rs[ecnt].t=t;
rs[ecnt].next=fl[f];
fl[f]=ecnt++;
}
bool topsort(){
q.clear();
for(int i=1;i<=pcnt;i++){
if(deg[i]==0){
q.push(i);
}
}
while(!q.empty()){
int f=q.front();q.pop();
for(int i=fl[f];i!=-1;i=rs[i].next){
int t=rs[i].t;
deg[t]--;
if(deg[t]==0){
q.push(t);
}
}
}
for(int i=1;i<=pcnt;i++)
if(deg[i]!=0)return 1;
return 0;
}
void prerun(){
pcnt=0,ecnt=0;
memset(id , 0,sizeof id );
memset(deg, 0,sizeof deg);
memset(fl ,-1,sizeof fl );
}
int main(){
#ifndef LOCAL
freopen("dependency.in" ,"r",stdin);
freopen("dependency.out","w",stdout);
#endif
// freopen("2.in","r",stdin);
ios_base::sync_with_stdio(false);
int T;
T=read();
while(T--){
prerun();
pn=read();
for(int i=1;i<=pn;i++){
getline(cin,st);
st+=" ";
int f=0,len=st.length();
long long hsn=0;
for(int j=0;j<len;j++){
if(st[j]=='\r')continue;
if((st[j]>='A'&&st[j]<='Z')||(st[j]>='0' && st[j]<='9'))
hsn=(hsn*Upbit+st[j])%Mod;
else{
if(id[hsn]==0)id[hsn]=++pcnt;
int sid=id[hsn];
if(f==0) f=sid;
else {
add(f,sid);
deg[sid]++;
}
hsn=0;
}
}
}
cout<<(topsort()?"Yes":"No")<<endl;
}
}

T3

可以证明将处理出的数组排序然后切开就是优的。

然后有个决策单调性,即转移点是从$i-\frac{i}{j}$到$i$的

那么就可以了(水题使我快乐)

//assignment

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#define N 5555
#define M 55555
#define LL long long using namespace std; int pn,cn,pron,edn;
LL vals[N],pre[N];
LL dp[N][N],
siz[N];
int apppn=0; typedef pair<LL,int> pli;
struct SR{
int f,t,next;
int v;
};
priority_queue<pli,vector<pli>,greater<pli> >q;
struct MAPS{
SR rs[M];
int fl[N];
int cnt;
LL dis[N];
bool is_v[N];
MAPS(){
memset(fl,-1,sizeof fl);
cnt=0;
}
void add(int f,int t,int v){
rs[cnt].f=f;
rs[cnt].t=t;
rs[cnt].v=v;
rs[cnt].next=fl[f];
fl[f]=cnt++;
}
void dij(int st){
memset(dis,0x3f,sizeof dis);
dis[st]=0;
q.push(make_pair(0,st));
while(!q.empty()){
int f=q.top().second;q.pop();
if(is_v[f])continue;
is_v[f]=1;
for(int i=fl[f];i!=-1;i=rs[i].next){
int t=rs[i].t;
if(dis[t]>dis[f]+rs[i].v){
dis[t]=dis[f]+rs[i].v;
q.push(make_pair(dis[t],t));
}
}
}
}
}am,bm; int main(){
#ifndef LOCAL
freopen("assignment.in" ,"r",stdin);
freopen("assignment.out","w",stdout);
#endif
int a,b,v;
scanf("%d%d%d%d",&pn,&cn,&pron,&edn);
for(int i=1;i<=edn;i++){
scanf("%d%d%d",&a,&b,&v);
am.add(a,b,v);
bm.add(b,a,v);
}
am.dij(cn+1);
bm.dij(cn+1);
for(int i=1;i<=cn;i++){
vals[i]=am.dis[i]+bm.dis[i];
// cout<<vals[i]<<" ";
}
// cout<<endl;
sort(vals+1,vals+cn+1);
for(int i=1;i<=cn;i++)
pre[i]=pre[i-1]+vals[i];
memset(dp,0x3f,sizeof dp);
for(int i=1;i<=cn;i++){
dp[i][1]=pre[i]*(i-1);
}
for(int i=1;i<=cn;i++){
for(int j=2;j<=pron;j++){
for(int k=i-i/j;k<i;k++){
dp[i][j]=min(dp[i][j],dp[k][j-1]+(pre[i]-pre[k])*(i-k-1));
}
}
}
// cout<<dp[cn-1][pron-1]<<endl;
cout<<dp[cn][pron]<<endl;
}

19-11-12-Aftern-℘的更多相关文章

  1. NOIp 11.11/12

    最后一场比较正式的NOIp模拟赛,写一发小总结.题目没什么好说的,大部分很简单,先贴一下代码. 1111 T1 //string //by Cydiater //2016.11.11 #include ...

  2. Java面试题:n=2\n1*2*5*6\n--3*4\n\nn=3\n1*2*3*10*11*12\n--4*5*8*9\n----6*7\n如何实现如上结构的数据

    今天学长在面试的时候遇到了一道题,然后让大家做一做. 在不看下面的答案之前,悠闲的朋友们一起来抖动一下大脑吧! 以下是我的想法: import java.util.Scanner;public cla ...

  3. 在CentOS7中安装scala-2.11.12

    从官网下载scala的相关版本 https://www.scala-lang.org/download/2.11.12.html 解压安装包 tar zxf scala-.tgz -C /usr/sc ...

  4. 11:12:21.924 [main] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.

    11:12:21.924 [main] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class or ...

  5. 第24次Scrum会议(11/12)【欢迎来怼】

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/11/12 17:05~17:32,总计27min. 地 ...

  6. TeamWork#3,Week5,Scrum Meeting 11.6, 11.7, 11.11, 11.12

    11.6:到目前为止基本已完成相关知识的学习,各方面工作都开始进行,一开始进行比较慢. 11.7:项目遇到困难,需要补充相关知识,进度慢了下来. 11.11:各方面工作进展比较顺利,没有什么大问题. ...

  7. ZT --- extern "C"用法详解 2010-08-21 19:14:12

    extern "C"用法详解 2010-08-21 19:14:12 分类: C/C++ 1.前言: 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus ...

  8. atitit.Oracle 9 10 11 12新特性attilax总结

    atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. ...

  9. Memory+SLES 11/12 OS Tuning & Optimization

    https://www.suse.com/documentation/sles11/book_sle_tuning/data/sec_util_memory.html SLES 11/12 OS Tu ...

  10. Update 19.11 for Azure Sphere

    今天,微软发布了面向Azure Sphere的19.11更新,其主要亮点就是加入了对开发工具Visual Studio Code和Linux开发环境的支持.具体来讲,本次更新包含3个部分: 1. Az ...

随机推荐

  1. Eclipse代替Oracle接管Java EE

    Eclipse Foundation接替Oracle成为Java EE的新东家,Oracle不再管理Java EE. 作为采用的一部分,Java EE可能会更换新名称,Oracle建议在其建议中使用J ...

  2. Xtrabackup 热备

    Xtrabackup介绍Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁):m ...

  3. Vue的项目搭建及请求生命周期

    目录 Vue的项目搭建及请求生命周期 Vue-CLI的项目搭建 环境搭建 项目创建 pycharm运行Vue项目 Vue项目的大体结构 Vue的请求生命周期 两个小用法 Vue的项目搭建及请求生命周期 ...

  4. vue-router配置子路由

    1.改写App.vue 里面的代码 ,增加路由跳转,增加Hi页面1,Hi页面2的跳转 2.修改HI.vue 里面的内容,增加 <router-view class="aaa" ...

  5. 【JZOJ6389】小w学图论

    description 小w这学期选了门图论课,他在学习点着色的知识.他现在得到了一张无向图,并希望在这张图上使用最多n种颜色给每个节点染色,使得任意一条边关联的两个节点颜色不同. 小w获得一张n个节 ...

  6. jQuery - DOM对象和jQuery对象

    DOM对象 : 直接使用JavaScript获取的节点对象 jQuery对象 : 使用jQuery选择器获取的节点对象 DOM对象和jQuery对象分别拥有一套独立的方法, 不能混用 <scri ...

  7. Scala 方法与函数简单记录

    /** * Scala 方法与函数 * Scala 有方法与函数,二者在语义上的区别很小.Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量.换句话来说在类中定义的函数即是方法 */ o ...

  8. lombok使用手册

    lombok使用手册: 1.安装插件 1.1.idel: 1.2.使用lombok还需要引用相关jar包 参考网址:https://projectlombok.org/features/all 2.注 ...

  9. git使用过程中问题

    git提交文件命令顺序 fetch merge add commit pull push 取消已add文件 git reset HEAD 文件名 覆盖本地文件 git checkout 文件名 $ g ...

  10. kubernetes配置(kubeconfig)对多集群的访问

    配置对多集群的访问 本文展示如何使用配置文件来配置对多个集群的访问. 在将集群.用户和上下文定义在一个或多个配置文件中之后,用户可以使用 kubectl config use-context 命令快速 ...