A:

Solved.

分别处理出每个%7后余数的数字个数,再组合一下

 #include <bits/stdc++.h>
using namespace std; #define ll long long
int n, m;
ll cnt[][]; ll calc(ll x, ll y)
{
if (x % >= y) return x / + ;
return x / ;
} int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
memset(cnt, , sizeof cnt);
for (int i = ; i < ; ++i)
{
cnt[][i] += calc(n, i);
cnt[][i] += calc(m, i);
}
ll res = ;
--cnt[][], --cnt[][];
cnt[][] = cnt[][];
for (int i = ; i < ; ++i)
res += cnt[][i] * cnt[][ - i];
printf("%lld\n", res);
}
return ;
}

B:

Solved.

状压DP.

 #include <bits/stdc++.h>
using namespace std; #define ll long long
int n,m;
ll f[][<<];
bool ins[<<];
int main(){
while(cin>>n>>m&&n){
for(int i=;i<(<<m);i++){
bool cnt=,hasodd=;
for(int j=;j<m;j++)
if((i>>j)&)hasodd|=cnt,cnt=;
else cnt^=;
ins[i]=hasodd|cnt?:; }
f[][]=;
for(int i=;i<=n;i++)
for(int j=;j<(<<m);j++){
f[i][j]=;
for(int k=;k<(<<m);k++){
if((j&k)==&&ins[j|k])
f[i][j]+=f[i-][k];
} }
cout<<f[n][]<<endl;
}
}

C:

Solved.

 #include<bits/stdc++.h>

 using namespace std;

 int n, s;

 int main()
{
while(~scanf("%d %d", &n, &s))
{
int Min = 0x3f3f3f3f;
for(int i = ; i < n; ++i)
{
int num = ;
scanf("%d" , &num);
Min = min(Min, num);
}
printf("%d\n", s * Min);
}
return ;
}

D:

Solved.

 #include<bits/stdc++.h>

 using namespace std;

 const int maxn = ;
int n, s;
int arr[maxn]; int main()
{
while(~scanf("%d %d", &n, &s))
{
for(int i = ; i <= n; ++i)
{
scanf("%d", arr + i);
}
sort(arr + , arr + + n);
printf("%d\n", arr[n - ] * s);
}
return ;
}

E:

Solved.

最长公共子序列。

 #include<bits/stdc++.h>
using namespace std;
const int maxn=;
int f[maxn][maxn];
char s1[maxn],s2[maxn];
int main(){
cin>>s1+>>s2+;
int n=strlen(s1+),m=strlen(s2+);
for(int i=;i<=n;i++)
{ for(int j=;j<=m;j++)
{
f[i][j]=max(f[i - ][j], f[i][j - ]);
if(s1[i]==s2[j])
{
f[i][j]=max(f[i][j],f[i-][j-] + );
} }
}
printf("%d\n",f[n][m]);
}

F:

Solved.

$dp[i][j][k] 表示到达i, j 的时候步数为k的方案数$

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=;
const ll MOD = 1e9 + ;
ll dp[maxn][maxn][maxn];
int fx[][]={{,},{,-},{-,},{-,-},{,},{,-},{-,},{-,-}};
int n,m,s;
inline bool check(int x,int y){
if(x< || x>n || y< ||y>m)return false;
return true;
}
int main(){
while(cin>>n>>m>>s)
{
memset(dp, , sizeof dp);
dp[][][]=;
for(int k=;k<=s;k++)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++){
for(int t=;t<;t++)
{
int x=i+fx[t][];
int y=j+fx[t][];
if(check(x,y)){
dp[i][j][k]+=dp[x][y][k-];
dp[i][j][k]%=MOD;
}
}
}
}
}
cout<<dp[n][m][s]<<endl;
}
}

G:

Unsolved.

H:

Solved.

考虑离线,对$每个数处理出到L左边离它最近的非互质的数,以及到R右边$离它最近的非互质的数,

再考虑先固定$l, 对每一个r处理出答案$

再考虑什么时候把数的贡献加进去,仅当这个数的$L < l 的时候便可以加入贡献,贡献的范围是[pos, R - 1], pos 表示那个数的位置$

 #include <bits/stdc++.h>
using namespace std; #define N 100010
#define pii pair <int, int>
int n, q, a[N], l[N], r[N], dp[N], ans[N], vis[N];
vector <int> fac[N];
vector <pii> v[N], qv[N]; namespace SEG
{
int a[N << ], lazy[N << ];
void build(int id, int l, int r)
{
a[id] = ;
if (l == r) return;
int mid = (l + r) >> ;
build(id << , l, mid);
build(id << | , mid + , r);
}
void pushdown(int id, int l, int r, int mid)
{
if (!lazy[id]) return;
lazy[id << ] += lazy[id];
a[id << ] += lazy[id] * (mid - l + );
lazy[id << | ] += lazy[id];
a[id << | ] += lazy[id] * (r - mid);
lazy[id] = ;
}
void pushup(int id) { a[id] = a[id << ] + a[id << | ]; }
void update(int id, int l, int r, int ql, int qr, int val)
{
if (l >= ql && r <= qr)
{
a[id] += val * (r - l + );
lazy[id] += val;
return;
}
int mid = (l + r) >> ;
pushdown(id, l, r, mid);
if (ql <= mid) update(id << , l, mid, ql, qr, val);
if (qr > mid) update(id << | , mid + , r, ql, qr, val);
pushup(id);
}
int query(int id, int l, int r, int pos)
{
if (l == r) return a[id];
int mid = (l + r) >> ;
pushdown(id, l, r, mid);
if (pos <= mid) return query(id << , l, mid, pos);
else return query(id << | , mid + , r, pos);
}
} void init()
{
for (int i = ; i <= ; ++i)
{
if (vis[i]) continue;
fac[i].push_back(i);
for (int j = * i; j <= ; j += i)
{
vis[j] = ;
fac[j].push_back(i);
}
}
} int main()
{
init();
while (scanf("%d%d", &n, &q) != EOF)
{
for (int i = ; i <= n + ; ++i) l[i] = , r[i] = n + , v[i].clear(), qv[i].clear();
for (int i = ; i <= n; ++i) scanf("%d", a + i);
memset(vis, , sizeof vis);
for (int i = ; i <= n; ++i)
for (auto it : fac[a[i]])
l[i] = max(l[i], vis[it]), vis[it] = i;
memset(vis, 0x3f, sizeof vis);
for (int i = n; i >= ; --i)
for (auto it : fac[a[i]])
r[i] = min(r[i], vis[it]), vis[it] = i;
//for (int i = 1; i <= n; ++i) printf("%d %d\n", l[i], r[i]);
//for (int i = 1; i <= n; ++i) for (int j = 0, len = fac[a[i]].size(); j < len; ++j) printf("%d%c", fac[a[i]][j], " \n"[j == len - 1]);
for (int i = ; i <= n; ++i)
v[l[i]].emplace_back(r[i], i);
for (int qq = , l, r; qq <= q; ++qq)
{
scanf("%d%d", &l, &r);
qv[l].emplace_back(r, qq);
}
SEG::build(, , n);
for (int i = ; i <= n; ++i)
{
for (auto it : v[i - ])
SEG::update(, , n, it.second, it.first - , );
for (auto it : qv[i])
ans[it.second] = SEG::query(, , n, it.first);
SEG::update(, , n, i, r[i] - , -);
}
for (int i = ; i <= q; ++i) printf("%d\n", ans[i]);
}
return ;
}

I:

Solved.

特判$n == 0 并且 m == 0 的情况$

其他情况下,因为$k >= |n - m| 先手的人只需要去掉石子使得两堆相同,然后跟着另一个人取就可以必胜$

 #include<bits/stdc++.h>

 using namespace std;

 typedef long long ll;

 ll n, m, k;

 int main()
{
while(~scanf("%lld %lld %lld", &n, &m, &k))
{
if(n == || m == ) puts("LAOZI CHUI SI NI!");
else puts("HAI YOU SEI!");
}
return ;
}

J:

Solved.

考虑 末尾两位为00, 25, 50, 75四种状态

 #include<bits/stdc++.h>

 using namespace std;

 const int INF = 0x3f3f3f3f;
const int maxn = 1e5 + ; char str[maxn]; int main()
{
while(~scanf("%s", str + ))
{
int ans = INF;
int len = strlen(str + ); //
int tmp1 = -, tmp2 = -;
for(int i = len; i >= ; --i)
{
if(str[i] == '')
{
if(tmp1 == -) tmp1 = len - i;
else if(tmp2 == -)
{
tmp2 = len - i - ;
break;
}
}
}
if(tmp1 != - && tmp2 != -) ans = min(ans, tmp1 + tmp2); //
tmp1 = -, tmp2 = -;
for(int i = len; i >= ; --i)
{
if(str[i] == '')
{
if(tmp1 == -) tmp1 = len - i;
}
if(str[i] == '')
{
if(tmp2 == -) tmp2 = len - i;
}
} if(tmp1 != - && tmp2 != -)
{
if(tmp1 < tmp2)
{
ans = min(ans, tmp1 + tmp2 - );
}
else
{
ans = min(ans, tmp1 + tmp2);
}
} //
tmp1 = -, tmp2 = -;
for(int i = len; i >= ; --i)
{
if(str[i] == '')
{
if(tmp1 == -) tmp1 = len - i;
}
if(str[i] == '')
{
if(tmp2 == -) tmp2 = len - i;
}
} if(tmp1 != - && tmp2 != -)
{
if(tmp1 < tmp2)
{
ans = min(ans, tmp1 + tmp2 - );
}
else
{
ans = min(ans, tmp1 + tmp2);
}
}
//
tmp1 = -, tmp2 = -;
for(int i = len; i >= ; --i)
{
if(str[i] == '')
{
if(tmp1 == -) tmp1 = len - i;
}
if(str[i] == '')
{
if(tmp2 == -) tmp2 = len - i;
}
}
if(tmp1 != - && tmp2 != -)
{
if(tmp1 < tmp2)
{
ans = min(ans, tmp1 + tmp2 - );
}
else
{
ans = min(ans, tmp1 + tmp2);
}
}
if(ans == INF) ans = -;
printf("%d\n", ans);
}
return ;
}

哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级) Solution的更多相关文章

  1. HUST软件与微电子学院第八届程序设计竞赛-小乐乐下象棋

    这题其实很简单,我们可以用一个bfs搜索出所有的,小于k步的,到不同点不同步数的方案数. 我们首先初始化,走到(0,0)点的时候,我们把步数设置为0,但是方法数设置为1,这是因为我们走零步,到一个点, ...

  2. 哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛) C.Coronavirus (BFS)

    题意:有一个图,要求从\(S\)走到\(E\),\(.\)表示可以走的路径,\(*\)周围的八个方向均不能走,要求判断是否能走到\(E\),若能,输出最小路径长度,否则输出\(Impossible\) ...

  3. ACM-南京理工大学第八届程序设计竞赛-网络赛(2016.04.17)

    A.偷吃糖果Time Limit: 1000Ms Memory Limit: 65536KB Description小鱼喜欢吃糖果.他有两盒糖果,两盒糖果分别仅由小写字母组成的字符串s和字符串t构成. ...

  4. 江西财经大学第二届程序设计竞赛同步赛 H大时钟 (扩展欧几里得)

    链接:https://ac.nowcoder.com/acm/contest/635/H来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...

  5. 牛客网 江西财经大学第二届程序设计竞赛同步赛 D.绕圈游戏-(跳青蛙游戏)找数的所有因子就可以了

    链接:https://ac.nowcoder.com/acm/contest/635/D来源:牛客网 D.绕圈游戏 433为了帮ddd提升智商,决定陪他van特殊的游戏.433给定一个带有n个点的环, ...

  6. hdu 计算机学院大学生程序设计竞赛(2015’11)

    搬砖 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submissi ...

  7. 计算机学院大学生程序设计竞赛(2015’11)1005 ACM组队安排

    1005 ACM组队安排 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Pro ...

  8. 【数论&想法题】小C的问题 @"科林明伦杯"哈尔滨理工大学第八届程序设计竞赛

    Time Limit: 1000 MS Memory Limit: 256000 K Description 小C是一个可爱的女孩,她特别喜欢世界上最稳定的图形:三角形.有一天她得到了n根木棍,她把这 ...

  9. "科林明伦杯"哈尔滨理工大学第八届程序设计竞赛 题解

    题目链接  Problems Problem A 快速幂累加即可. #include <cstdio> #include <cstring> #include <iost ...

随机推荐

  1. GIS-004-Cesium版权信息隐藏

    .cesium-widget-credits { display: none; } .cesium-viewer .cesium-widget-credits { display: none; }

  2. ubuntu下Eclipse创建Django项目

    (注:部分过程可能需要FQ) Eclipse版本:Mars.x 点击help->Eclipse Marketplace,搜索“PyDev”并下载安装. 然后选择window->prefer ...

  3. Cognos入门教程

    Cognos入门教程 1. ReportStudio入门教程 ReportStudio入门教程(http://blog.csdn.net/column/details/ygy-reportstudio ...

  4. printf如何输出64位整数

    From: http://blog.csdn.net/zzqhost/article/details/6064886 关于printf函数输出64位数的问题,其实在window下和linux下是不一样 ...

  5. 谷歌Volley网络框架讲解——Network及其实现类

    我们看到Network接口只有一个实现类BasicNetwork,而HttpStack有两个实现类. BasicNetwork这个类是toolbox工具箱包里的,实现了Network接口. 先来看下N ...

  6. stringstream读入每行数据

    做了下阿里的编程测试题,就30分钟,不是正常的输入输入,直接给一个数组作为输入. 于是带想题和处理数据花了20分钟,最后10分钟搞一个dij模版, 竟然只过了66%,应该是我数组开小了. 题目数据量没 ...

  7. 深刻理解 React (一) ——JSX和虚拟DOM

    版权声明:本文由左明原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/155 来源:腾云阁 https://www.qclou ...

  8. Java初学者笔记一:元类、获取类型、枚举

    零.绪论: 2018年新年伊始,学习Java的冲动越来越强烈,毕竟以后无论是做安全开发还是安全研究都必不可少的掌握这门语言,所以在不断完善Python作为脚本语言的主语言的情况下觉得学习Java作为高 ...

  9. oracle通过sql随机取表中的10条记录

    oracle通过sql随机取表中的10条记录: SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE Row ...

  10. Mac - iPhone屏幕录制

    1. Mac电脑屏幕录制 1.1 文件->新建屏幕录制   1.2 点击红色按钮   1.3 截取需要录制的屏幕部分,点击开始录制   1.4 点击工具栏的停止按钮,停止录制   1.5 然后会 ...