苏州大学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 ...
随机推荐
- SC.Lab3对于Factory的构建过程(from HIT)
Factory设计模式基本就是通过传入指定的参数/或者不传入参数,通过Factory的某个方法(为了避免实例化Factory对象,一般方法为静态static),来获取一个对象.这个是Factory用的 ...
- IAR 设置问题
IAR 设置问题 1.worksplace 的设置问题:edit configuration 这样,每个工程都可以有一个workplace,方便切换. 2.文件夹包含问题 3.包含.dat文件问题 . ...
- Cookie存储在哪里
内存是临时存储,关机后信息就没了.硬盘是长久存储,不删除就一直在.内存容量决定你电脑能同时运行的程序多少,硬盘容量决定你电脑能存放多少东西. 好比内存是手,硬盘是口袋,东西可以临时放在手里,可是口袋才 ...
- SSM+Redis结构框架及概述
1.Spring IoC承担了一个资源管理.整合.即拔即插的功能. 2.Spring AOP可以提供切面管理,特别是数据库事务管理的功能. 3.Spring MVC用于把模型.视图和控制器分层,组成一 ...
- Jmeter - Linux 下面执行jmeter-server的时候出现:An error occurred: Cannot start. localhost is a loopback address.错误
Jmeter - Linux 下面执行jmeter-server的时候出现:An error occurred: Cannot start. localhost is a loopback addre ...
- 12541:TNS无监听状态
上次在项目上遇见数据库报这个问题,然后网上几乎都是让重新进行配置数据库.配置多次之后还是无效,最后找到了问题的根源. 使用的是Oracle数据库,用PLSQL登录报的这个错误. 在计算机全局搜索:li ...
- 旧iPhone遭禁,会让苹果产业链迎来新转机吗?
过去几个月,苹果的日子并不好过,先是新iPhone定价过高导致销售疲软,股价连续下跌,万亿市值失守,被微软和亚马逊超越:手机销量上则被华为赶超,整个iPhone产业链都有点儿"哀鸿遍野&qu ...
- 洛谷 P2725 邮票 Stamps
题目传送门 解题思路: f[i]表示凑总面值i所需的最少邮票张数,然后快乐的跑完全背包. AC代码: #include<iostream> #include<cstdio> # ...
- linux网络编程之shutdown() 与 close()函数详解
linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这 ...
- Java提升三:函数式接口
1. 定义 函数式接口即是有且仅有一个抽象方法的接口. 注意: (1)函数式接口只对于抽象方法有要求,对于接口中的默认方法,静态方法,私有方法数量并不作特殊要求. (2)既然函数式接口定义了抽象方法, ...