cf401D 状态压缩dp好题,每次把新加入集合的数字放在最后即可

/*
它可以通过重新排列数字n,
它没有任何前导零,
x除以m后的余数等于0. 每次把新加的数放在最后
dp[i][j]表示状态i下模m=j的数量
dp[i|(1<<k)][j*10+a[k]]+=dp[i][j]; */
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll len,n,m,a[];
ll dp[<<][];
int main(){
cin>>n>>m;
while(n)a[++len]=n%,n/=;
dp[][]=;
for(int i=;i<(<<len)-;i++)
for(int j=;j<m;j++)
for(int k=;k<len;k++){
if(i&(<<k))continue;
if(i==&&a[k+]==)continue;//前导0
dp[i|(<<k)][(j*+a[k+])%m]+=dp[i][j];
}
ll cnt[]={},f[]={},ans=dp[(<<len)-][];
f[]=f[]=;
for(int i=;i<=;i++)f[i]=f[i-]*i;
for(int i=;i<=len;i++)cnt[a[i]]++;
for(int i=;i<;i++)
if(cnt[i])ans/=f[cnt[i]];
cout<<ans<<endl;
}

cf959E 思维题

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,ans;
ll lowbit(ll x){return x&(-x);} int main(){
cin>>n;
ll tmp=n,cnt=;
while(tmp){
ans+=tmp/*cnt;
tmp/=,cnt*=;
}
if(n==lowbit(n)){
cout<<ans<<endl;
return ;
}
while(n){
n-=lowbit(n); ans+=lowbit(n);
}
cout<<ans<<endl;return ;
}

cf598E dp好题,就是最经典的线性dp,想通了挺简单的

/*
dp[i][j][k]在i*j的方块里吃k大小的代价
*/
#include<bits/stdc++.h>
using namespace std;
int dp[][][];
int main(){
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<=;k++){
if(k== || k==i*j){
dp[i][j][k]=;
continue;
}
else dp[i][j][k]=;
for (int h = ; h <= k; h++){
for (int m = ; m < j; m++)
dp[i][j][k] = min(dp[i][j][k], dp[i][m][h] + dp[i][j - m][k - h] + i*i);
for (int m = ; m < i; m++)
dp[i][j][k] = min(dp[i][j][k], dp[m][j][h] + dp[i - m][j][k - h] + j*j);
}
}
int t,n,m,k;
cin>>t;
while(t--){
cin>>n>>m>>k;
cout<<dp[n][m][k]<<endl;
}
}

cf886D 字符串乱搞+判环

#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
using namespace std; string s,ans[]; int main()
{
int i,j,n,f,x,len;
int vis[],chu[],ru[],mp[][];
while(cin>>n)
{
f=;
memset(mp,,sizeof(mp)); //字符构成的图
memset(ru,-,sizeof(ru)); //每个字符的入度
memset(chu,-,sizeof(chu)); //每个字符的出度
//在下面这个循环中,chu/ru=0则说明字符出现过,chu/ru=-1则没出现过
for(i=;i<n;i++)
{
cin>>s; //输入字符串
memset(vis,,sizeof(vis)); //用于判断每个字符串中字符出现的次数
len=s.length();
vis[s[]-'a']++; //首个字符出现次数+1
ru[s[]-'a']=; //首个字符出现过
chu[s[]-'a']=; //首个字符出现过
for(j=;j<len;j++)
{ //从第 1 个字符开始建图
int u=s[j-]-'a'; //前一字符
int v=s[j]-'a'; //当前字符
mp[u][v]=;
vis[v]++;
if(vis[v]>) f=; //如果出现次数>1,则输出 NO
ru[v]=;
chu[v]=;
}
}
int next[]; //每个字符的后继字符
memset(next,-,sizeof(next));
for(i=;i<;i++)
for(j=;j<;j++)
if(mp[i][j])
{ //如果存在边
ru[j]++; //入度+1
chu[i]++; //出度+1
next[i]=j; //记录后继
}
for(i=;i<;i++)
if(ru[i]>||chu[i]>)
{ //如果有字符的出度或入度 >1则输出 NO
f=;
break;
}
for(i=;i<;i++)
{ //判断是否有环
x=i;
memset(vis,,sizeof(vis));
while(x!=next[x])
{
if(vis[x]==)
{ //如果当前元素访问过则有环
f=;
break;
}
vis[x]=;
x=next[x];
}
}
if(n> || !f)
{
cout<<"NO"<<endl;
continue;
}
int tol=;
for(i=;i<;i++) //遍历 26个字符
if(ru[i]==)
{ //如果入度为 0,则会形成一串字符
ans[tol]='a'+i;
x=i;
while(next[x]!=-)
{ //加入后继字符
char c=next[x]+'a';
ans[tol]+=c;
x=next[x];
}
tol++;
}
sort(ans,ans+tol); //排序
for(i=;i<tol;i++) cout<<ans[i];
cout<<endl;
}
return ;
}

4.9cf自训9..的更多相关文章

  1. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  2. UML基础与Rose建模实训教程

    目  录 第1章  初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章  Rational Rose工具... 6 2.1 安装与配置Rational Ro ...

  3. <实训|第六天>偷偷让新手的Linux无限重启附linux主机名称不是随便乱改的!

    先说个事情:这几天我正在忙一个项目的设计,8月1号之前要弄出来,所以每天都要弄到很晚,可能更新就有点跟不上了,不过我如果有时间的话,我就更新,没时间的话,我会在8月1号之后统一更新出来,希望大家谅解! ...

  4. <实训|第五天>通过搭建NFS,FTP实现共享文件附Vim脚本游戏

    先说个事情:我周末是不更新这个系列教程的,不过其他内容的会更新,我周末就整理这一周的各种内容到我的微信公众号中,提供给大家! 期待已久的linux运维.oracle"培训班"终于开 ...

  5. ThoughtWorks西邮暑期特训营 -- JavaScript在线笔试题

    ThoughtWorks 公司在西邮正式开办的只教女生前端开发的女子卓越实验室已经几个月过去了,这次计划于暑期在西邮内部开展面向所有性别所有专业的前端培训. 具体官方安排请戳:ThoughtWorks ...

  6. 软件工程实训项目案例--Android移动应用开发

    实训过程 角色分工 1.项目经理:负责项目的组织实施,制定项目计划,并进行跟踪管理 2.开发人员:对项目经理及项目负责 3.需求分析员:负责系统的需求获取和分析,并协助设计人员进行系统设计 4.系统设 ...

  7. <实训|第四天>Linux下的vim你真的掌握了吗?附上ftp远程命令上传。

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...

  8. <实训|第三天>Linux登录界面的修改以及Richard Stallman、自由软件运动

    在写博客之前我想说两点: 承认一个错误,昨天写的实训第二天,我把redhat6.7写成了Linux6.7,感谢热心人士的指出! 昨天写的文章名字太长了,今天改善,内容感觉表述不全,希望各位谅解! 官方 ...

  9. <实训|第二天>掌握linux6.7中安装vmware、vmware安装linux发行版本以及遇到的问题最后libreoffice的安装

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...

随机推荐

  1. vue 限制输入字符长度

    一.watch方法: <input v-model="textareaValue" type="textarea" placeholder="请 ...

  2. Java多线程-线程池ThreadPoolExecutor构造方法和规则

    为什么用线程池 原文地址 http://blog.csdn.net/qq_25806863/article/details/71126867 有时候,系统需要处理非常多的执行时间很短的请求,如果每一个 ...

  3. QT出现应用程序无法正常启动0xc000007b的错误

    最近做了一个成绩管理系统,打包好后,运行他的exe可执行文件时,出现了如下图的错误提示: 在网上查阅了很多资料,其中有篇文章给了我很大的启示和帮助,文章地址http://www.cnblogs.com ...

  4. [BZOJ 3110] [ZJOI 2013] K大数查询

    Description 有 \(N\) 个位置,\(M\) 个操作.操作有两种,每次操作如果是: 1 a b c:表示在第 \(a\) 个位置到第 \(b\) 个位置,每个位置加入一个数 \(c\): ...

  5. [NOI2009]变换序列(二分图匹配)

    我们先不考虑字典序最小,先来求出一种可行解. 不难发现,对于每一个i值,它所对应的T值在模n意义下最多两个,于是我们可以用二分图匹配来判断. 那字典序最小呢? 回顾一下二分图匹配的算法:网络流?貌似不 ...

  6. Python爬虫之二

    1)什么叫做URL url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及 ...

  7. Entity Framework入门教程(6)--- 在线场景中保存数据

    在线场景中保存数据 在线场景中保存实体数据是一项相当容易的任务,因为使用的是同一个context,这个context会自动跟踪所有实体发生的更改. 下图说明了在线场景中的CUD(创建,更新,删除)操作 ...

  8. 抓包工具Charles基本用法

    我们在进行B/S架构的Web项目开发时,在前端页面与后台交互的调试的时候,通常使用在JSP中加入“debugger;”断点,然后使用浏览器的F12开发者工具来查看可能出错的地方的数据.或者使用Http ...

  9. Webform——JQuery基础(选择器、事件、DOM操作)

    一.选择器 1.基本选择器 ①id选择器:#       ②class选择器:.       ③标签名选择:标签名 ④并列选择:用,隔开          ⑤后代选择:用空格隔开 代码用法展示:   ...

  10. Contest2158 - 2019-3-14 高一noip基础知识点 测试3 题解版

    传送门 预计得分:0 实际得分:90 还行 T1 数学卡精 二分double卡精 反正就是卡精 怎么办?卡回去!! 将double*=1e4,变成一个long long 注意四舍五入的奇技淫巧 代码 ...