苏州大学ICPC集训队新生赛第二场
A - Score
水
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
int sum=;
string s;
cin>>s;
int len=s.size();
int tmp=;
for(int i=;i<len;i++){
if(s[i]=='O')sum+=tmp,tmp++;
else {
sum+=tmp;
tmp=;
}
}
sum+=tmp;
cout<<sum<<endl;
}
return ;
}
B - Tetrahedron
题意:四面体,从D走n-1步回到D点,问你有多少种走法,数据量1e7;
标准错误解法:广搜:
#include<iostream>
#include<queue>
using namespace std;
#define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++)
#define per(i,j,k) for(int i=(int)k;i>=(int)j;i--)
#define pb push_back
#define pf push_front
#define fi first
#define se second 11
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
typedef double db;
// const db PI=acos(-1.0);
const ll INF=0x3f3f3f3f3f3f3f3fLL;
const int inf=0x3f3f3f3f;//0x7fffffff;
const double eps=1e-;
const ll MOD=1e9+;
const int maxn=1e3+;
ll n,ans;
struct node{int id;ll step;node(int x,ll y){id=x,step=y;}};
void bfs(){
queue<node>Q;
Q.push(node(,));
while(!Q.empty()){
node tmp=Q.front();
Q.pop();
if(tmp.step==n&&tmp.id==){
ans++;
}
if(tmp.id==&&tmp.step<n){
int t=(tmp.step+)%MOD;
Q.push(node(,t));
Q.push(node(,t));
Q.push(node(,t));
}
if(tmp.id==&&tmp.step<n){
int t=(tmp.step+)%MOD;
Q.push(node(,t));
Q.push(node(,t));
Q.push(node(,t));
}
if(tmp.id==&&tmp.step<n){
int t=(tmp.step+)%MOD;
Q.push(node(,t));
Q.push(node(,t));
Q.push(node(,t)); } if(tmp.id==&&tmp.step<n){
int t=(tmp.step+)%MOD;
Q.push(node(,t));
Q.push(node(,t));
Q.push(node(,t));
}
}
}
int main(){
cin>>n;
ans=;
bfs();
cout<<ans<<endl;
// system("pause");
return ;
}
fyh正解:dp;
这个很像dp,定义状态: dp(i,j)为走i步,到了 j 点 ;
每走一步都受前面状态影响:转移方程为: dp[i][j]+=dp[i-1][k];
#include<bits/stdc++.h>
using namespace std;
#define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++)
#define per(i,j,k) for(int i=(int)k;i>=(int)j;i--)
#define pb push_back
#define pf push_front
#define fi first
#define se second 11
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
typedef double db;
// const db PI=acos(-1.0);
const ll INF=0x3f3f3f3f3f3f3f3fLL;
const int inf=0x3f3f3f3f;//0x7fffffff;
const double eps=1e-;
const ll MOD=1e9+;
const int maxn=1e7+;
int dp[maxn][];
int main(){
int n;
cin>>n;
dp[][]=;
dp[][]=;
dp[][]=;
dp[][]=;
for(int i=;i<=n;i++)
for(int j=;j<=;j++){
for(int k=;k<=;k++){
if(j==k)continue;
dp[i][j]+=dp[i-][k];
// else dp[i][j]=
dp[i][j]%=MOD;
}
}
cout<<dp[n][]<<endl;
return ;
}
G - Jumping Jack
题意:给你一个x 小于1e9;问你从0走到x要走几步;
解法:这题本来想广搜,问题和抓住那头牛很像,但数据量太大,搜索爆炸,本来想优化,但怎么搞呢?
正解:你想他 想左走向右走,在第n步,本来走 n+n+1,但现在变成了 -n+n+1,相差 2*n 步,这是个微调;
那你直接一直跳,超过的步数如果是偶数,就n/2步,是奇数肯定不能这样微调的,只能继续走。
和抓住这头牛 不一样,这题向左再向右是有策略的 ,可以微调的;
#include<bits/stdc++.h>
using namespace std;
int main(){
int x;
cin>>x;
if(x<)x=-x;
int sum=;
int i;
for(i=; ;i++){
sum+=i;
if(sum==x)break;
else if(sum>x&&(sum-x)%==)break; }
cout<<i<<endl;
return ;
}
D - Ehab and a 2-operation task
这题傻眼了:
题意:让你对一个序列进行n+1次操作。怎么把它变成严格单增的序列;
做法:先模1,这样全都清空为0,然后都变成2*n,一步步取余,最后就是单增得了;
但是为什么不是2n呢,手算一下就知道了,后面会重合;
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k;
cin>>n;
for(int i=;i<=n;i++)scanf("%d",&k);
printf("%d\n",n+);
printf("2 %d 1\n",n);
printf("1 %d %d\n",n,*n);
for(int i=;i<n;i++){
printf("2 %d %d\n",i,*n-i);
} return ;
}
C - Permute Digits
题意:给你a,b,让你把a变成小于b的最大数。
解法:开始大模拟:
但一直wa,后来又mqf给了这样一组数据;3517 3503,
开始没有考虑取不到解的情况。
就是你一直取大于小于的,如果后面无解呢?只能回退,让前面的变小。
这点没考虑到。
然后模拟一直崩,有时间再来调一下。
错误解法:
#pragma comment(linker, "/STACK:102400000,102400000")
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define pf push_front
#define fi first
#define se second 11
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
typedef double db;
const db PI=acos(-1.0);
const ll INF=0x3f3f3f3f3f3f3f3fLL;
const int inf=0x3f3f3f3f;//0x7fffffff;
const double eps=1e-;
const ll MOD=1e9+;
const int maxn=1e7+;
int vis[];
bool flag;
int find(int x){
for(int j=;j>=;j--){
if(!flag&&vis[j]>&&j<=x){
if(j<x)flag=;
vis[j]--;
return j;
} else if(flag&&vis[j]>){
vis[j]--;
return j; }
}
return -;
}
int main(){ flag=;
string sa,sb;
cin>>sa>>sb;
if(sa.size()<sb.size()){
sort(sa.begin(),sa.end());
int len=sa.size();
for(int i=len-;i>=;i--)//逆序输出
cout<<sa[i];
} else {
memset(vis,,sizeof vis);
// vector<int>ans;
int ans[];
int len=sa.size();
for(int i=;i<len;i++){
int tmp=sa[i]-'';
vis[tmp]++;
} len=sb.size();
int i;
for( i=;i<len;i++){
int t=sb[i]-'';
int tmp=find(t);
if(tmp!=-)ans[i]=tmp;
else { while(tmp==-){
i--;
vis[ans[i]]++;
t=sb[i]-''-;
tmp=find(t);
}
ans[i]=tmp;
vis[tmp]--;
flag=;
} }
// int p=0;
// while(ans[p]==0&&p!=len-1)p++; for(int i=;i<len;i++)
cout<<ans[i];
}
return ;
}
//
正确解法:用string里的大小比较,默认最小,然后每次从最高位开始找,能替换就替换掉。
如果替换后大于b,就退回来,确实很巧妙。
#include<bits/stdc++.h>
using namespace std;
int main(){
string t,a,b;
cin>>a>>b;
sort(a.begin(),a.end());
if(a.size()<b.size()){
reverse(a.begin(),a.end());
}
else {
int len=a.size();
int L,R;
for(L=;L<len;L++){
R=len-;
t=a;
while(L<R){
swap(a[L],a[R--]);
sort(a.begin()+L+,a.end());
if(a>b)a=t;
else break;
} } }
cout<<a<<endl;
return ;
}
英语吓得不轻;
#include<bits/stdc++.h>
using namespace std;
int main(){
int suma=,sumb=,oka=,okb=;
int n,t,x,y;
cin>>n;
while(n--){
cin>>t>>x>>y;
if(t==){
suma+=;
oka+=x;
}
else {
sumb+=;
okb+=x;
}
}
if(oka>=suma/)cout<<"LIVE"<<endl;
else cout<<"DEAD"<<endl;
if(okb>=sumb/)cout<<"LIVE"<<endl;
else cout<<"DEAD"<<endl; return ;
}
F - Squares
看清题意就好了,站在边上的不算属于这个空间;
#include<bits/stdc++.h>
using namespace std;
int a[];
int main(){
int n,k;
cin>>n>>k;
for(int i=;i<=n;i++)scanf("%d",&a[i]);
sort(a+,a++n);
if(k>n)cout<<"-1"<<endl;
else {
cout<<a[n-k+]<<" "<<a[n-k+]<<endl;
}
return ;
}
苏州大学ICPC集训队新生赛第二场的更多相关文章
- Xeon 第一次训练赛 苏州大学ICPC集训队新生赛第二场(同步赛) [Cloned]
A.给出一个字符串,求出连续的权值递增和,断开以后权值重新计数,水题 #include<iostream> #include<string> #include<cmath ...
- Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)
Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...
- NOI.AC NOIP模拟赛 第二场 补记
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...
- 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)
以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...
- SCNU省选校赛第二场B题题解
今晚的校赛又告一段落啦,终于"开斋"了! AC了两题,还算是满意的,英语还是硬伤. 来看题目吧! B. Array time limit per test 2 seconds me ...
- 【CQ18阶梯赛第二场】题解
[A-H国的身份证号码I] 用N个for语句可以搞定,但是写起来不方便,所以搜索. dfs(w,num,p)表示搜索完前w位,前面x组成的数位num,最后以为为p. 如果搜索到第N位,则表示num满足 ...
- 2019.10.24 CSP%你赛第二场d1t3
题目描述 Description 精灵心目中亘古永恒的能量核心崩溃的那一刻,Bzeroth 大陆的每个精灵都明白,他们的家园已经到了最后的时刻.就在这危难关头,诸神天降神谕,传下最终兵器——潘少拉魔盒 ...
- 暑假集训单切赛第二场 UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(字符串处理)
一开始不懂啊,什么Home键,什么End键,还以为相当于括号,[]里的东西先打印出来呢.后来果断百度了一下. 悲催啊... 题意:给定一个字符串,内部含有'['和']'光标转移指令,'['代表光标移向 ...
- 暑假集训单切赛第二场 UVA 10982 Troublemakers
题意:将点放在两个集合,同一个集合的边保留,不同集合的边删去,使得边至少减少一半. 输出任何一种方案即可.如果不能,输出Impossible 思路:设如果两个人为一对捣蛋鬼,则two[i][j]=t ...
随机推荐
- python学习 第一章 one day(补)
python入门 一.编写Hello,World 方法一. 进入解释器,实施输入并获取到执行结果 C:\Users\84535>python Python 3.7.4 (tags/v3.7.4: ...
- Linux --xrandr command
Source: https://www.x.org/archive/current/doc/man/man1/xrandr.1.xhtml https://blog.csdn.net/syh_486_ ...
- mybatis官方中文文档
http://www.mybatis.org/mybatis-3/zh/index.html
- vue移动端transition兼容
vue移动端transition兼容 .face-recognition .wrapper(:style="{height: viewHeight+'px'}") .face-re ...
- ch8 faux列
在一个布局中,假设有导航元素和内容元素,切给他们都分别应用了背景,理想情况下,背景应该拉长到整个布局的最大高度,从而形成列的效果,但是实际上,因为导航元素没有扩展到最大高度,所以它们的背景不会拉长,如 ...
- 如果不想在django 的settings中保存mysql数据库的密码
如题,你可以编写一个配置文件,用'OPTIONS' 将该配置文件导入进来,这样你发布到git上的源码上就没有你的数据库密码了. 这是django推荐的方法. # settings.py DATABAS ...
- python默认参数问题
我们在定义默认参数时,有时会遇到一写似乎难以理解的问题.比如,在第二次调用函数时,默认参数记住了上一次执行的结果: >>> def test(L=[3,]): ... L.appen ...
- Jmeter插件解释
Jmeter插件解释 1.jp@gc - Actiive Threads Over Time:不同时间活动用户数量展示(图表) 2.jp@gc - AutoStop Listener :自动停止监听 ...
- 基于Python的大数据的分页模型代码
最近在写一个cmdb系统的分页,尽管Django本身有分页的模块儿,但是还是想实现一下自己心中想的分页的一种逻辑 因为,在我们工作当中,当我们的数据量超级大的时候,其实我们每次分页查询都不必将所有的数 ...
- vs2010编译C++ 指向指针的指针
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _T ...