A.谍报分析

题意:请你编程,快速统计出频率高的前十个单词。

思路:字符串输入,map哈希表map<string,int >记录每个单词出现的次数,pair重载优先级

#include<bits/stdc++.h>
using namespace std; map<string,int > mp;
string s; typedef pair<string, int> PAIR;
bool cmp(const PAIR& lhs, const PAIR& rhs) {
if(lhs.second == rhs.second){
return lhs.first < rhs.first;
}
return lhs.second > rhs.second;
} int main(){
char c[20010];
while(cin>>s){
int len = s.length();
if(s[len-1] == '.' || s[len-1] == ','){
for(int i=0;i<len-1;i++){
c[i] = s[i];
}
c[len-1] = '\0';
}else{
for(int i=0;i<len;i++){
c[i] = s[i];
}
c[len] = '\0';
}
mp[c]++;
// cout<<c<<endl;
}
vector<PAIR> vec(mp.begin(),mp.end());
sort(vec.begin(),vec.end(),cmp);
for(int i=0;i<10;i++){
cout<<vec[i].first<<" "<<vec[i].second<<endl;
}
return 0;
}

B.情报传递

题目:特科组的情报人员共有N人,其代号分别为0,1,……,N-1。 0号是最高领导人,特工之间有一套严格的单线联络程序,即,每个特工人员只有一个上线,他获得的情报需层层上传递到0号手里,由0号发报出去。 特工i在传递情报时,若通往到0号的通道尚未建立,则需要建立一级级单线通道;若他的上线已建立好通道,只需建立两人通道,信息发送给上线;依次类推。若特工i已建立好到0号的通道,则直接发出情报。日伪统治中心南京,既是情报来源丰富的地方,又是特工人员活动最危险的地方。因此,一旦某个特工处于不安全状态,他必须马上撤离,同时他的所有下线(处在通道上的一级级下线)也一同撤离。 已知***特科组的组织结构,你的任务是计算,当某特工i需要发送情报时,最少需要建立几个情报人员的通道;当某特工i处于不安全状态时,最少需要撤离多少人员。

思路:画图,是一颗树,边没有连,dfs向下遍历统计危险时需要撤离的数量(撤离子孙),bfs向上统计直到根结点0,edge数组记录当前边是否建立了通道,通过样例还可以看出要根0也要算一次,wa了6发最终AC

#include<bits/stdc++.h>
using namespace std; const int maxn = 5100;
int n,m;
int fa[maxn];
int edge[maxn][maxn];
int ans;
int vis[maxn];
int cnt;
vector<int> v[maxn];
struct node{
int x;
int step;
node(int xx,int ss){
x = xx;
step = ss;
}
};
queue<node> q; void bfs(int s){
q.push(node(s,0));
while(!q.empty()){
int curx = q.front().x;
int curs = q.front().step;
if(curx == 0){
if(edge[0][0]){
ans = min(ans,curs);
}else{
ans = min(ans,curs);
ans++;
edge[0][0] = 1;
}
}
q.pop();
if(curx == 0) continue;
if(edge[fa[curx]][curx]){
q.push(node(fa[curx],curs));
}else{
edge[fa[curx]][curx] = 1;
edge[curx][fa[curx]] = 1;
q.push(node(fa[curx],curs+1));
}
}
} void dfs(int x){
cnt++;
for(int i=0;i<v[x].size();i++){
int child = v[x][i];
if(edge[x][child]){
edge[x][child] = 0;
edge[child][x] = 0;
dfs(child);
}
}
} int main(){
cin>>n;
fa[0] = 0;
for(int i=1;i<=n-1;i++){
int d;
cin>>d;
fa[i] = d;
v[d].push_back(i);
}
cin>>m;
char ch[10];
int first = 1;
for(int i=1;i<=n;i++){
scanf("%s",ch);
int d;
cin>>d;
if(ch[0] == 'S'){
ans = 0x3f3f3f3f;
bfs(d);
cout<<ans<<endl;
}else{
cnt = 0;
dfs(d);
if(edge[fa[d]][d]){
edge[fa[d]][d] = 0;
edge[d][fa[d]] = 0;
cnt++;
}
cnt--;
cout<<cnt<<endl;
}
}
return 0;
}

C.最小密钥

思路:因为数据量小,枚举mod的值,vis数组标记就可以了

#include<bits/stdc++.h>
using namespace std; int t;
int n;
int a[3005];
int vis[20005]; int main(){
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int maxi = a[1];
for(int i=1;i<=n;i++) if(a[i] > maxi) maxi = a[i];
memset(vis,0,sizeof(vis));
int ans = maxi; for(int mod = 1;mod<=maxi+1;mod++){
bool flag = true;
for(int i=1;i<=n;i++){
if(!vis[a[i]%mod]){
vis[a[i]%mod] = 1;
}else{
flag = false;
break;
}
}
if(flag){
ans = mod;
break;
}
for(int i=0;i<=mod+1;i++) vis[i] = 0;
}
cout<<ans<<endl;
}
return 0;
}

D.年终奖金

思路:DP,区间dp做多了很容易看出状态转移方程。。。然后就是边界的问题了,慢慢调。

#include<bits/stdc++.h>
using namespace std; const int inf = 0x3f3f3f3f;
const int maxn = 110;
int n,m,c;
int a[maxn];
int dp[maxn][maxn]; int main(){
while(cin>>n>>m>>c){
memset(dp,inf,sizeof(dp));
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=m;i<=n;i++){
dp[1][i] = (a[i]-a[1])*(a[i]-a[1]) + c;
}
//第i个人
for(int i=2;i<=n/m;i++){
//第i个人完成的任务数 j
for(int j=(i-1)*m+1;j<=n;j++){
//第i个人取到j个物品,可以由第i-1个人完成的最后一个任务k开始推出来;(所以是区间dp)
for(int k=m;k<=j-m*(i-1);k++){
dp[i][j] = min(dp[i][j],dp[i-1][j-k] + (a[j]-a[j-k+1])*(a[j]-a[j-k+1]) + c );
}
}
}
int ans = inf;
for(int i=1;i<=n/m;i++){
ans = min(ans,dp[i][n]);
}
cout<<ans<<endl;
}
return 0;
}

可以改成一维 O(n^2),前面这一种方法 i~人这一维可以忽略

#include<stdio.h>
#include <bits/stdc++.h>
#define MAX 0x3f3f3f3f
#define min(x,y)(x<y?x:y)
using namespace std;
int a[110];
int dp[110];
int main()
{
int n,k,c;
while(~scanf("%d%d%d",&n,&k,&c))
{
memset(dp,MAX,sizeof(dp));
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
if(n<k){//这里需要注意一下的是如果任务不足K个,直接用最大减最小的平方
printf("%d\n",(a[n]-a[1])*(a[n]-a[1]));
continue;
}
dp[0]=0;
//区间dp 完成第i个任务是由 前一个人第j个任务推过来的(第j个任务可以是 0~i-k这些值) 也就表示 当前这个人从j+1完成到i个任务
for(int i=k;i<=n;i++)
{
for(int j=0;j<=i-k;j++) //前一个人 ~ 当前这个人 最少差为k
{
if(j<k&&j!=0)
continue;
dp[i]=min(dp[j]+c+(a[i]-a[j+1])*(a[i]-a[j+1]),dp[i]);
}
}
printf("%d\n",dp[n]);
}
return 0;
}

E.GDP值

还没看题

F.Binary to Prime

思路:理解题意后得知先素数打表,倒序遍历一遍给出的字符串,如果是'1',就累加起来

#include<bits/stdc++.h>
using namespace std; int sum = 0;
vector<char> v;
int prime[1000010];
int storage[1000010]; void Prime(){
for (int i = 2; i <= 1000000; i++) {
prime[i] = true;
}
for (int i = 1; i * i <= 1000000; i++) {
if (prime[i]) {
for (int j = i * i; j <= 1000000; j += i) {
prime[j] = false;
}
}
}
} int main(){
Prime();
int cur = 1;
for(int i=1;i<=100010;i++){
if(prime[i]){
storage[cur++] = i;
}
}
string s;
while(cin>>s){
sum = 0;
for(int i=s.length()-1;i>=0;i--){
v.push_back(s[i]);
}
int len = v.size();
for(int i=0;i<len;i++){
if(v[i] == '1'){
sum+=storage[i+1];
}
}
cout<<sum<<endl;
v.clear();
}
return 0;
}

G. Plumbing the depth of lake

题意:如果当前方块的8个方向有一个与他相等,他就是题目说的reading。统计地图上最深的(值最大)的方块

#include<bits/stdc++.h>
using namespace std; int t;
int a[100][100];
int vis[100][100];
int n,m;
int dr[8][2] = {{-1,0},{1,0},{0,-1},{0,1},{1,1},{1,-1},{-1,1},{-1,-1}}; bool in(int x,int y){
return x>=1 && x<=n && y>=1 && y<=m;
} int main(){
cin>>t;
while(t--){
cin>>n>>m;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
int ans = -0x3f3f3f3f;
for(int x=1;x<=n;x++){
for(int y=1;y<=n;y++){
if(a[x][y] == 0) continue;
for(int i = 0;i<8;i++){
int tx = x+dr[i][0];
int ty = y+dr[i][1];
if(in(tx,ty) && a[tx][ty] == a[x][y]){
ans = max(ans,a[x][y]);
}
}
}
}
cout<<ans<<endl;
}
return 0;
}

H. Intelligent Parking Building

还没看题

每天一套题打卡|河南省第十届ACM/ICPC的更多相关文章

  1. 每天一套题打卡|河南省第七届ACM/ICPC

    A 海岛争霸 题目:Q次询问,他想知道从岛屿A 到岛屿B 有没有行驶航线,若有的话,所经过的航线,危险程度最小可能是多少. 多源点最短路,用floyd 在松弛更新:g[i][k] < g[i][ ...

  2. 每天一套题打卡|河南省第十一届ACM/ICPC

    A 计划日 题意:已知李明在YYYY年MM月DD日星期W订了学习计划,现在想看看李明N天后的完成情况和个人总结,你能告诉我那天的日期和星期几吗? 模拟日期计算: 计算星期可以用基姆拉尔森公式 //中国 ...

  3. 每天一套题打卡|河南省第八届ACM/ICPC

    A 挑战密室 化学方程式求分子量 这题我懒得写了 可以用map<string,int>哈希表,表示每种分子的相对分子质量 之后,从头遍历到尾. 1.数字:连读直到不是数字 2.字母:连读直 ...

  4. 每天一套题打卡|河南省第九届ACM/ICPC

    A 表达式求值 表达式求值:可以用递归求解,也可以用栈模拟,考过多次. 类似题目:NYOJ305,NYOJ35 用栈模拟做法: #include <stdio.h> #include &l ...

  5. 【河南省第十届ACM 省赛 A-谍报分析】

    题目描述 “八一三”淞沪抗战爆发后,*几次准备去上海前线视察和指挥作战.但都因为宁沪之间的铁路和公路遭到了敌军的严密封锁,狂轰滥炸,一直未能成行. 特科组织,其主要任务是保卫的安全,了解和掌握敌方的动 ...

  6. 河南省第十届省赛 Plumbing the depth of lake (模拟)

    title: Plumbing the depth of lake 河南省第十届省赛 题目描述: There is a mysterious lake in the north of Tibet. A ...

  7. 河南省第十届省赛 Intelligent Parking Building

    title: Intelligent Parking Building 河南省第十届省赛 tags: [模拟,省赛] 题目描述: There is a new revolution in the pa ...

  8. 2014年河南省第七届ACM大赛总结

    虽然大赛已经结束了两天,不过比赛的场景还是不断地在眼前回放,一遍遍,这次的比赛给了我很深刻的感悟还有教训. 刚开始比赛选择了贩卖武器那道题,也是全场到最后唯一没有被人做出来的一道题,策略的严重错误,大 ...

  9. hdu 4431 第37届ACM/ICPC 天津赛区现场赛A题 枚举

    题意:就是给了13张牌.问增加哪些牌可以胡牌.m是数字,s是条,p是筒,c是数字 胡牌有以下几种情况: 1.一个对子 +  4组 3个相同的牌或者顺子.  只有m.s.p是可以构成顺子的.东西南北这样 ...

随机推荐

  1. 线性表->顺序存储

    文字描述: 用一组地址连续的存储单元依次存储线性表的数据元素,只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构. 即是,线性表的顺序存 ...

  2. Ionic3多个自定义过滤器--管道(pipe)

    往往我们创建自定义管道一般都不止只会创建一个自定义管道,和自定义组件类似,创建多个方式如下. 一.命令行生成管道 ionic g pipe formateDate ionic g pipemoneyD ...

  3. [vue开发记录]全局loading组件

    上图不上种,菊花万人捅: loading.js: import './loading.css' let Loading = {} // 避免重复install,设立flag Loading.insta ...

  4. 为多维数组添加一列以及reshape用法注意

    https://blog.csdn.net/orangefly0214/article/details/80934008参考这个了链接 下面是我自己用到的代码,亲测可用 # data = pd.rea ...

  5. Copy & XCopy

    1):copy不能在有子目录存在的文件中拷贝文件的同时重命名此文件名(注:这里C:为根目录,bat为子目录),而xcopy能,不过会出现提示,当然你可以加参数而不使它提示. C:\>copy c ...

  6. Byword for Mac(Markdown编辑器)中文版

    还在找Markdown编辑器吗?那不妨试试Byword for Mac吧!这是一款轻量级的富文本编辑器,byword mac版提供了完整的Markdown支持,包含脚注.表格.交叉引用等功能,Bywo ...

  7. vue移动端适配

    https://www.w3cplus.com/mobile/vw-layout-in-vue.html

  8. arcgis for JavaScript API 4.5与4.3的区别

    arcgis 4.5与4.3区别: 鉴于本人使用4.3时间比较久,而arcgis for JavaScript API于9月28日推出了4.5版本,但是直接更换4.5的init.js会出现意想不到的错 ...

  9. poi java读取excel文件

    官网使用学习链接地址 http://poi.apache.org/components/spreadsheet/quick-guide.html

  10. git之reset图解

    https://blog.csdn.net/longintchar/article/details/81843048 1.三棵树. 此时如果我们运行 git status,会发现没有任何改动,因为现在 ...