wap 5.23 网测几道题目
1. n个犯人,m个省份, 如果相邻的2个犯人来自同一省份,则是不安全的,求不安全的个数。
正难则反,用全部的个数减去非法的个数,就是最后的答案。 m^n - m * (m - 1) ^ (n - 1). 这里的m,n很大,所以就是快速幂乘法。
#include<bits/stdc++.h>
#define pb push_back
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 1e3 + ;
const int mod = ;
ll n, m;
ll pow(ll x, ll y) {
if(y == ) return ;
ll r = ;
ll b = x;
while(y) {
if(y & ) {
r = r * b % mod;
}
y >>= ;
b = b * b % mod;
}
return r;
}
void solve() {
cin >> m >> n;
//cout << m<< " " << n <<endl;
//cout << pow(m, n) << endl;
//cout << pow(m, n - 1) << endl;
ll res = ((pow(m, n) - pow(m - , n - ) * m) % mod + mod)%mod;
cout << res << endl;
} int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
ios::sync_with_stdio();
cin.tie(); cout.tie();
solve();
return ;
}
2. 从n个数,选取一些数,使得能被m整除。
这种题,就是一般的套路, 搞一下余数, 然后就是0,1背包。注意一维数组优化,滚动数组, 取余。
#include<bits/stdc++.h>
#define pb push_back
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 1e6 + ;
int n, m;
int a[maxn];
void yes() {
cout << "Yes" << endl;
}
void no() {
cout << "No" << endl;
}
int dp[][maxn];
void solve() {
scanf("%d%d", &n, &m);
int x, y;
for (int i = ; i < n; i++) {
scanf("%d", &x);
x = x % m;
a[x]++;
}
if(a[] > ) {
yes(); return;
} dp[][] = ;
vector<int> av;
for (int i = ; i <= m - ; i++) {
for (int j = ; j < a[i]; j++)
av.push_back(i);
//cout << i << endl;
}
//cout << "asd" << endl;
int cur = , nxt = ;
for (int tx : av) {
for (int i = m - ; i >= ; i--) {
if(dp[cur][i] > ) {
dp[nxt][i] = ;
int t = (i + tx) % m;
if(t == ) t = m;
dp[nxt][t] = ;
//cout << t << endl;
}
}
swap(cur, nxt);
for (int i = ; i < m; i++)
dp[nxt][i] = ;
//cout << tx << endl;
} if(dp[cur][m]) yes();
else no();
} int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
solve();
return ;
}
3. 有一些操作,插入和查询,插入是往末尾进行插入,查找的是末尾长度为l的里面的最大值。
由于每次动态更新,区间不停的变换,我只想到线段树的做法,就写了线段树的。logn单点更新, logn区间查询。
#include<bits/stdc++.h>
#define pb push_back
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 2e5 + ;
ll f[maxn * ];
int n;
int x, y;
ll v;
void bt(int o, int left, int right) {
}
void add(int o, int left, int right) {
if(left > right) return;
if(left == right && left == x) {
f[o] = v;
} else {
int mid = (left + right) / ;
if(x <= mid) add(o * , left, mid);
else add(o * + , mid + , right);
f[o] = max(f[o * ], f[o * + ]);
}
}
ll ask(int o, int left, int right) {
if(right < x || y < left) return ;
if(x <= left && right <= y) return f[o];
int mid = (left + right) / ;
ll ml, mr;ml = mr = ;
if(x <= mid) ml = ask(o * , left, mid);
if(y >= mid + ) mr = ask(o * + , mid + , right);
return max(ml, mr);
}
int m;
ll mod;
char ch[];
void solve() {
scanf("%d%lld", &m, &mod);
int p = ;
ll lst = , t;
for (int i = ; i < m; i++) {
//cout << i << endl;
scanf("%s%lld", ch, &t);
if(ch[] == 'I') {
t = (t + lst) % mod;
x = ++p; v = t;
add(, , m);
} else {
if(t == ) {
printf("0\n");
continue;
}
x = p - t + ;
y = p;
lst = ask(, , m);
printf("%lld\n", lst);
}
}
} int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
solve();
return ;
}
4. 逆序对,现在有1-n,一共n个数, 求逆序对的个数为m的排列的个数。1 <= n,m <= 1000.
枚举,数个数,贪心的方式是不行的,那就是dp了。
枚举最大的一个数,看如何进行转移。dp[i][j] 代表长度为i, 逆序对的个数为j的个数。考虑从dp[i-1]转移过来,增加的逆序对的个数,就很容易写出来转移方程。
写出来之后,发现时间复杂度是n^3的,不满足要求, 然后用前缀和维护一下,使得0(1)的求取区间的和。使得复杂度降为n^2.
#include<bits/stdc++.h>
#define pb push_back
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 1e3 + ;
const int mod = ;
int n, k;
int dp[maxn][maxn];
int s[maxn][maxn];
void solve() {
cin >> n >> k; for (int i = ; i <= n; i++) {
dp[i][] = ;
s[i][] = ;
for (int j = ; j <= k; j++) {
dp[i][j] = s[i - ][j];
if(j - i >= )
dp[i][j] = (dp[i][j] - s[i - ][j - i] + mod) % mod;
s[i][j] = (s[i][j - ] + dp[i][j]) % mod;
//cout << i << " " << j << " " << dp[i][j] << endl;
} }
cout << dp[n][k] << endl; } int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
ios::sync_with_stdio();
cin.tie(); cout.tie(); solve();
return ;
}
wap 5.23 网测几道题目的更多相关文章
- C语言超级经典400道题目
C语言超级经典400道题目 1.C语言程序的基本单位是____ A) 程序行 B) 语句 C) 函数 D) 字符.C.1 2.C语言程序的三种基本结构是____构A.顺序结构,选择结构,循环结 B.递 ...
- hdu 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】(转)
HDU 动态规划(46道题目)倾情奉献~ [只提供思路与状态转移方程] Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包 ...
- 小白欢乐多——记ssctf的几道题目
小白欢乐多--记ssctf的几道题目 二哥说过来自乌云,回归乌云.Web400来源于此,应当回归于此,有不足的地方欢迎指出. 0x00 Web200 先不急着提web400,让我们先来看看web200 ...
- 在 n 道题目中挑选一些使得所有人对题目的掌握情况不超过一半。
Snark and Philip are preparing the problemset for the upcoming pre-qualification round for semi-quar ...
- wap网测一道题目
1. 给定一个字符串s, 1 <= len(s) <= 3000, 定义odd palindrome string为长度为奇数的回文串, 求s中该奇回文串的个数. 比如axbcba , 结 ...
- SQL的几道题目
1.构造数据插入方案表t_project_finish表 a)将addtime更新为当前时间的前一天 首先想到的是addtime=addtime-1,然后就开始验证这个想法. 插入一行数据,包括主键和 ...
- C++面试出现频率最高的30道题目
http://blog.csdn.net/wangshihui512/article/details/9092439 1.new.delete.malloc.free关系 delete会调用对象的析构 ...
- Java 递归 常见24道题目 总结
1.N个台阶的走法递归[这里设为10个台阶] /** * N个台阶的走法递归 * <p> * 有个楼梯,台阶有10个,每次可以跳上1阶 或者 2阶 ,那么台阶的走法一共有多少种 */ @T ...
- codeforces 几道题目
BZOJ挂了....明天就要出发去GDKOI了....不能弃疗. 于是在cf水了几道题, 写写详(jian)细(dan)题解, 攒攒RP, 希望GDKOI能好好发挥....... 620E. New ...
随机推荐
- 10.3 io流 正篇 FileReader FileWriter读写代码
一.FileWriter 小节: 1)FileWriter fw = new FileWriter("a.txt",true);//表示追加写入,默认是false.正常情况:执行多 ...
- 北京Linux运维培训怎么选?
北京的地理优势和经济优势基本无需多言,作为全国机会最多的地方,吸引了无数的北漂前赴后继.作为中国互联网中心之一,北京有海量的运维岗位正在等待大家淘金.北京的Linux云计算培训业蓬勃发展. 云计算早已 ...
- Ansible实现zabbix服务器agent端批量部署
项目需求:由于搭建zabbix,需要每台服务器都需要安装监控端(agent)正常的的操作是一台一台去安装,这样确实有点浪费时间,这里为大家准备了一款开源 的自动化运维工具Ansible,相信大家也很熟 ...
- windows下python-nmap运行过程中出现的问题及解决办法
python-nmap 运行时出现了一下错误 D:\python\untitled5\Scripts\python.exe D:/python/untitled5/test.py Traceback ...
- 【Codeforces 126B】Password
[链接] 我是链接,点我呀:) [题意] 给你一个字符串s 让你从中选出来一个字符串t 这个字符串t是s的前缀和后缀 且在除了前缀和后缀之外的中间部位出现过. 且要求t的长度最长. 让你输出这个字符串 ...
- Caffe 工程的一些编译错误以及解决方案
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51371936 整理一下最近遇到caff ...
- Swift: 一句话获取虚拟机上APP所在的目录
在XCode6上,虚拟机的App的存放位置发生了变化,通过下面语句,我们可以立即获得其所在的位置: println(NSTemporaryDirectory())
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
整体来说.Visual Studio 2008和.NET 3.5是建立在.NET2.0核心的基础之上,.NET2.0核心本身将不再变化(假设不了解.NET2.0的朋友,请參看MSDN或者一些经典的书籍 ...
- 转:分布式事务之TCC服务设计和实现注意事项
由公司微服务培训引起的一丢丢对TCC的好奇 原文:https://yq.aliyun.com/articles/609854 一.TCC简介 TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操 ...
- jsonArray和Java List对象互转,日期处理
List转jsonArray : // 格式化日期 JsonConfig jsonConfig = new JsonConfig(); DSHJsonDateValueProcessor dshJso ...