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 网测几道题目的更多相关文章

  1. C语言超级经典400道题目

    C语言超级经典400道题目 1.C语言程序的基本单位是____ A) 程序行 B) 语句 C) 函数 D) 字符.C.1 2.C语言程序的三种基本结构是____构A.顺序结构,选择结构,循环结 B.递 ...

  2. hdu 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】(转)

    HDU 动态规划(46道题目)倾情奉献~ [只提供思路与状态转移方程] Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包 ...

  3. 小白欢乐多——记ssctf的几道题目

    小白欢乐多--记ssctf的几道题目 二哥说过来自乌云,回归乌云.Web400来源于此,应当回归于此,有不足的地方欢迎指出. 0x00 Web200 先不急着提web400,让我们先来看看web200 ...

  4. 在 n 道题目中挑选一些使得所有人对题目的掌握情况不超过一半。

    Snark and Philip are preparing the problemset for the upcoming pre-qualification round for semi-quar ...

  5. wap网测一道题目

    1. 给定一个字符串s, 1 <= len(s) <= 3000, 定义odd palindrome string为长度为奇数的回文串, 求s中该奇回文串的个数. 比如axbcba , 结 ...

  6. SQL的几道题目

    1.构造数据插入方案表t_project_finish表 a)将addtime更新为当前时间的前一天 首先想到的是addtime=addtime-1,然后就开始验证这个想法. 插入一行数据,包括主键和 ...

  7. C++面试出现频率最高的30道题目

    http://blog.csdn.net/wangshihui512/article/details/9092439 1.new.delete.malloc.free关系 delete会调用对象的析构 ...

  8. Java 递归 常见24道题目 总结

    1.N个台阶的走法递归[这里设为10个台阶] /** * N个台阶的走法递归 * <p> * 有个楼梯,台阶有10个,每次可以跳上1阶 或者 2阶 ,那么台阶的走法一共有多少种 */ @T ...

  9. codeforces 几道题目

    BZOJ挂了....明天就要出发去GDKOI了....不能弃疗. 于是在cf水了几道题, 写写详(jian)细(dan)题解, 攒攒RP, 希望GDKOI能好好发挥.......  620E. New ...

随机推荐

  1. 写一个 sum方法,在使用下面任一语法调用时,都可以正常工作

    console.log(sum(2,3)); // Outputs 5 console.log(sum(2)(3)); // Outputs 5 (至少)有两种方法可以做到: 方法1: functio ...

  2. P2884 [USACO07MAR]每月的费用Monthly Expense

    题目描述 Farmer John is an astounding accounting wizard and has realized he might run out of money to ru ...

  3. C++中的各种进制转换函数汇总及学习

    一.指定格式输出 1.C中指定格式输出 printf(); //按八进制格式输出,保留5位高位补零 printf(); //按十进制格式输出,保留3位高位补零 printf(); //按十六进制格式输 ...

  4. (C/C++学习)9.C/C++优化排序

    说明:在C/C++中常见的排序方法有两种,第一种为选择排序法,第二种为冒泡排序法,本文将对这两种排序法进行优化,并给出一种更为快捷的排序法. 一.未优化的排序法 现在假如要对一个数组进行排序,假设这个 ...

  5. BZOJ 1603 USACO 2008 Oct. 打谷机

    [题解] 水题.. 保存连接方式,按顺序处理即可. #include<cstdio> #include<algorithm> using namespace std; int ...

  6. springCloud学习-分布式配置中心(Spring Cloud Config)

    1.简介 Spring Cloud Config :分布式配置中心,方便服务配置文件统一管理,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中.在spring cloud co ...

  7. GIT的API主要应用示例

    这几个简单的API应用,主要是通过TOKEN来获取GIT内空的例子. 但在获取GIT的文件列表时,要注意区分目录和文件的MODE差别( 100644 普通文件 040000 普通目录 ). impor ...

  8. Spring MVC-控制器(Controller)-参数方法名称解析器(Parameter Method Name Resolver )示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_parametermethodnameresolver.htm 说明:示例基于Sp ...

  9. AngularJS:一行JS代码实现控件验证效果

    如上图所示,我们需要实现如下这些验证功能: 控件都是必输控件 都需要控制最大长度 第一次打开页面,控件不能显示为错误状态 输入内容再清空后,必输控件需要显示为错误状态 只有所有输入合法后,发布按钮才能 ...

  10. Apache模块开发指南-APR池

    转:原文: http://blog.csdn.net/zmxiangde_88/article/details/8038150 ------------------------------------ ...