苏州大学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 ...
随机推荐
- Vue - 引入本地图片的两种方式
第一种,只引入单个图片,这种引入方法在异步中引入则会报错. 比如需要遍历出很多图片展示时 <image :src = require('图片的路径') /> 第二种,可引入多个图片,也可引 ...
- english-phoneme
1. 声音概述 2. 音素phoneme与音标 2.1 音素与音标 2.2 音素与字母 2.3 字母发音-字母自然发音对照表 2.4 音标表 2.5 元音字母-辅音字母表 2.6 单元音发音口形趋势表 ...
- Jsp有哪些内置对象?作用分别是什么?
Page,pageContext,request,response,session,application,out,config,exception Page指的是JSP被翻译成Servlet的对象的 ...
- SpringCloud学习之Zuul路由转发、拦截和熔断处理(七)
Spring Cloud Zuul 服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能. Sp ...
- JDBC--使用beanutils工具类操作JavaBean
1.在JavaEE中,Java类的属性通过getter,setter来定义: 2.可使用BeanUtils工具包来操作Java类的属性: --Beanutils是由Apache公司开发,能够方便对Be ...
- P1435 回文字串(LCS问题)
题目背景 IOI2000第一题 题目描述(题目链接:https://www.luogu.org/problem/P1435) 回文词是一种对称的字符串.任意给定一个字符串,通过插入若干字符,都可以变成 ...
- 073、Java面向对象之利用构造方法为属性赋值
01.代码如下: package TIANPAN; class Book { // 定义一个新的类 private String title; // 书的名字 private double price ...
- python内置函数二
issubclass(a,b) 判断a类是否属于b的子类 返回为布尔值 locals() 显示局部变量 max() 取最大值 min() 取最小值 zip() 拉链方法 ...
- 2-10 就业课(2.0)-oozie:6、通过oozie执行mr任务,以及执行sqoop任务的解决思路
执行sqoop任务的解决思路(目前的问题是sqoop只安装在node03上,而oozie会随机分配一个节点来执行任务): ======================================= ...
- 怎样管理Exchange Server 2013资源邮箱
1. exchange资源邮箱介绍 这次将介绍Exchange Server 2013的资源邮箱相关内容. Exchange Server 2013的资源邮箱包含两类,其一为“会议室邮箱”,另一类是“ ...