Greedy Gift Givers (gift1)
/*
ID:123ldss2
PROG: gift1
LANG: C++
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<fstream>
#include<cmath>
#include <algorithm>
using namespace std;
const int inf=1<<28;
const int nMax=1005;
const int mMax=40000;
class nodea{
public:
int id;
nodea *p[130];
nodea(){
int i;
id=-1;
for(i=0;i<130;i++)p[i]=NULL;
}
};
nodea *root;
int cnt;
int getnum(char *s){
int i;
nodea *r=root;
int l=strlen(s);
for(i=0;i<l;i++){
if(r->p[s[i]]==NULL){
r->p[s[i]]=new nodea();
}
r=r->p[s[i]];
}
if(r->id==-1){
r->id=cnt;
cnt++;
}
return r->id;
}
int sum[100];
char name[200][200];
int main(){
freopen ( "gift1.in", "r", stdin );
freopen ( "gift1.out", "w", stdout );
char str[100];
int n,i,j,a,b,c,d;
while(scanf("%d",&n)!=EOF){
root=new nodea();
memset(sum,0,sizeof(sum));
cnt=1;
for(i=1;i<=n;i++){
scanf("%s",name[i]);
getnum(name[i]);
}
for(i=1;i<=n;i++){
scanf("%s",str);
a=getnum(str);
scanf("%d%d",&b,&c);
//sum[a]-=b;
int money;
if(c!=0){
money=b/c;
}
for(j=1;j<=c;j++){
scanf("%s",str);
d=getnum(str);
sum[d]+=money;
}
sum[a]-=money*c;
}
for(i=1;i<=n;i++){
printf("%s %d\n",name[i],sum[i]);
}
}
return 0;
}
/*
ID:123ldss2
PROG: friday
LANG: C++
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int play(int i){
if(i%4!=0||(i%100==0&&i%400!=0)){
return 0;
}
else return 1;
}
int common[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int nocommon[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int days(int year,int month,int day){
int a=0,i,aaa=0;
for(i=0;i<year;i++){
if(play(i)==1){
a++;
}
}
aaa=year*365+a;
if(play(i)==0){
for(i=0;i<month-1;i++){
aaa+=common[i];
}
aaa+=day;
}
else{
for(i=0;i<month-1;i++){
aaa+=nocommon[i];
}
aaa+=day;
}
return aaa;
}
int num[8];
int main(){
freopen("friday.in","r",stdin );
freopen("friday.out","w",stdout );
int year,n,month,day,i,aaa;
while(scanf("%d",&n)!=EOF){
memset(num,0,sizeof(num));
for(year=1900;year<=1900+n-1;year++){
for(month=1;month<=12;month++){
aaa=days(year,month,13);
aaa=(aaa+5)%7;
num[aaa]++;
}
}
cout<<num[6]<<" ";
for(i=0;i<5;i++){
cout<<num[i]<<" ";
}
cout<<num[5]<<endl;
}
return 0;
}
/*
ID:123ldss2
PROG: barn1
LANG: C++
*/
#include<iostream>
#include<cstring>
#include<fstream>
#include<cstdio>
#include <algorithm>
using namespace std;
const int nMax=1000;
int dis[nMax],pos[nMax];
int main(){
int m,s,c,i,j,a,b,n,ans;
freopen ( "barn1.in", "r", stdin );
freopen ( "barn1.out", "w", stdout );
while(scanf("%d%d%d",&m,&s,&c)!=EOF){
for(i=0;i<c;i++){
scanf("%d",&pos[i]);
}
if(m>=c){
cout<<c<<endl;
continue;
}
sort(pos,pos+c);
ans=pos[c-1]-pos[0];
for(i=0;i<c-1;i++){
dis[i]=pos[i+1]-pos[i];
}
sort(dis,dis+c-1);
b=m;
m--;
a=c-2;
while(m--&&a>=0){
ans-=dis[a];
// cout<<"dis"<<dis[a];
// cout<<" ans"<<ans<<endl;
a--;
}
cout<<ans+b<<endl;
}
return 0;
}
/*
ID:123ldss2
PROG: calfflac
LANG: C++
*/
#include<iostream>
#include<cstring>
#include<fstream>
#include<cstdio>
using namespace std;
const int nMax=200000;
int p[nMax];
char str1[nMax];
void build(char *str,int len) { //abc-->@#a#b#c#
int i=0,j;
str1[0]='@';//开始加入另特殊字符
str1[1]='#';
j=2;
for(i=0;i<len;i++ ){//在每个字符两边都插入一个特殊字符
str1[j++]=str[i];
str1[j++]='#';
}
str1[j]='\0';
}
int ps;
int manacher(){
int idd,mxx=0,maxx=0,record;
memset(p,0,sizeof(p));
for(int i=strlen(str1);i>=0;i--){
if( mxx>i )
p[i]=min(mxx-i, p[2*idd-i]);
else p[i]=1;
while(str1[i+p[i]]==str1[i-p[i]])
p[i]++;
if( i+p[i]>mxx ){
mxx=i+p[i];
idd=i;
}
if( p[i]>maxx){
maxx=p[i]-1;//P[id]-1就是该回文子串在原串中的长度
record=i;
ps=record;
}
}
return maxx;
}
int main(){
char c;
int len,a,b,n,i;
int pos[nMax];
char str[nMax],abc[nMax];
len=n=0;
freopen ( "calfflac.in", "r", stdin );
freopen ( "calfflac.out", "w", stdout );
// cin>>str;
// cout<<str<<endl;
while(scanf("%c",&c)!=EOF){
str[len]=c;
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){
if(c>='a'&&c<='z'){
abc[n]=c;
}
else{
abc[n]=c+'a'-'A';
}
pos[n]=len;
n++;
}
len++;
}
abc[n]='\0';
//cout<<endl<<abc<<endl;
build(abc,n);
a=manacher(); //回文串长度
cout<<a<<endl;
// cout<<ps<<"ps"<<endl;
if(ps%2==1){
ps=ps/2-1;
// cout<<ps<<endl;
for(i=pos[ps-a/2+1];i<=pos[ps+a/2];i++){
cout<<str[i];
}cout<<endl;
}
else{
ps=ps/2-1;
// cout<<ps<<endl;
for(i=pos[ps-a/2];i<=pos[ps+a/2];i++){
cout<<str[i];
}cout<<endl;
}
return 0;
}
/*
ID:bbezxcy1
PROG: beads
LANG: C++
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char str[500],str1[1500];
bool vis[3000];
int n;
int getnum(int loc)
{
memset(vis,0,sizeof(vis));
int a=0,b=0,i;
for(i=loc;i>loc-n;i--)
{
if(str1[i]==str1[loc]||str1[i]=='w')
{
a++;
vis[i]=vis[i+n]=vis[i+n*2]=1;
}
else
{
break;
}
}
for(i=loc+1;i<=loc+n;i++)
{
if((str1[i]==str1[loc+1]||str1[i]=='w')&&!vis[i])
{
b++;
}
else
{
break;
}
}
return a+b;
}
int main()
{
int i,j,ans,b,c;
freopen("beads.in","r",stdin);
freopen("beads.out","w",stdout);
while(scanf("%d",&n)!=EOF)
{
ans=0;
scanf("%s",str);
for(i=0;i<n;i++){
str1[i]=str[i];
str1[i+n]=str[i];
str1[i+n*2]=str[i];
}str1[n*3]='\0';
// cout<<getnum(23)<<endl;;
for(i=0;i<n;i++)
{
if(str1[i+n]=='w')
{
str1[i+n]='b';
ans=max(ans,getnum(i+n));
str1[i+n]='r';
ans=max(ans,getnum(i+n));
str1[i+n]='w';
}
else
{
ans=max(ans,getnum(i+n));
}
}
printf("%d\n",ans);
}
return 0;
}
分享到:
相关推荐
usaco 3到6章讲解
1. **USACO和ACM/ICPC编程竞赛**:了解这两种竞赛的性质、目标和参赛流程,有助于提升编程和算法技能。 2. **算法设计**:USACO和ACM比赛强调高效的算法设计,通过解题可以学习到排序、搜索、图论、动态规划等多种...
《USACO历年试题——2002》 USACO,全称为USA Computing Olympiad,是美国计算机奥林匹克竞赛,旨在提升中学生的算法设计和编程能力。2002年的USACO试题集,是这一赛事历史上的一个重要部分,对于学习算法、准备ACM...
【标题】USACO-Bessie-Come-Home.zip_Home Home 【正文】 这个压缩包文件中的内容是关于USACO(美国计算机奥林匹克)竞赛中一个名为"Bessie Come Home"的问题的C++解决方案。USACO是一个针对高中生的在线编程竞赛...
这个压缩包文件包含的是USACO比赛section1到section5的测试数据和标准程序,这对于准备参加USACO竞赛或者想要提升自己编程技能的学生来说,是非常宝贵的资源。 section1至section5代表了USACO比赛的不同难度级别,...
资源包包括USACO 2001-2007年月赛的测试数据;usaco月赛十年题典(2000-2009),usaco月赛2002-2008题解。单独下载需资源分30分以上。为了方便编程爱好者,我这边统一下载打包。欢迎下载。
《USACO魔法方阵:C++编程解析》 USACO(美国计算机奥林匹克)是一项旨在培养高中生计算机科学技能的竞赛。在这个问题中,我们关注的是“Magic Squares”,这是一个经典的数学概念,与C++编程相结合,构成了一个...
USACO1-5单元AC的代码~ 1 Chapter1 1.1 Section 1.1 1.2 Section 1.2 1.3 Section 1.3 1.4 Section 1.4 1.5 Section 1.5 2 Chapter2 2.1 Section 2.1 2.2 Section 2.2 2.3 Section 2.3 2.4 Section 2.4 3 Chapter3 ...
USACO(USA Computing Olympiad)是一项面向美国高中生的在线编程竞赛,旨在培养参赛者的算法设计和编程技能。在"Greedy Gift Givers"这个题目中,我们面对的是一个贪心算法的应用问题。贪心算法是一种解决问题的...
6. **USACO 一月竞赛** - 2011 年 1 月 7 日至 10 日 7. **USACO 二月竞赛** - 2011 年 2 月 4 日至 7 日 8. **USACO 三月竞赛** - 2011 年 3 月 11 日至 14 日 9. **USACO 美国公开赛** - 2011 年 4 月 28 日至 5 ...
这是USACO2001-2007月赛全集。 usaco是美国中学生的官方竞赛网站。是美国著名在线题库,专门为信息学竞赛选手准备。推荐直接阅读英语原文,既准确可靠又可提高英语水平。做题方式模拟正式比赛,采用标准测评机、文件...
这个名为"USACO-Training-Website:我的USACO培训网站解决方案"的压缩包文件,显然包含了作者对USACO训练网站上部分或所有章节的练习题目的解答。这些解答可能以源代码的形式存在,每个文件顶部可能带有详细的USACO...
《USACO入门指南——第一章解析》 USACO,全称USA Computing Olympiad,是美国计算机奥林匹克竞赛,旨在培养中学生在算法和编程方面的技能。对于初学者来说,USACO提供了很好的学习路径和挑战。本文将针对USACO的第...
在这个“USACO-Training-Pages”压缩包中,我们可以期待找到与USACO竞赛相关的各种资料,尤其是针对Java语言的学习材料。Java作为一种广泛应用于计算机科学领域的面向对象的编程语言,因其强大的跨平台能力和简洁的...
在这个“usaco-java-gold”主题中,我们将深入探讨Java在USACO黄金级别比赛中的应用,以及如何解决相关问题。 一、Java语言基础 1. 类与对象:Java是一种面向对象的语言,理解和熟练运用类和对象是解决USACO问题的...
我的USACO题解和程序
本压缩包“Notes-USACO-2021-Spring”中的笔记主要聚焦于2021年春季训练营和比赛的知识点,对于想要深入学习算法和提升编程能力的爱好者来说,具有极高的学习价值。 笔记内容可能包括但不限于以下几个方面: 1. **...
"USACO-Chapter2.rar_beginners" 是针对USACO第二章内容的压缩包,特别适合编程新手入门。 在USACO的第二章,主要涉及基础的算法和数据结构,这对于构建扎实的编程基础至关重要。让我们逐一解析这个压缩包中的四个...
分析USACO比赛结果。 根据数据绘制一些图表。 此扩展程序从USACO竞赛结果页面收集数据,并构建漂亮的图形以更好地了解参与者,国家和分数。 使用d3.js和nvd3.js库进行绘制。 使用方法:只需进入USACO竞赛结果页面,...
含2001~2017全部比赛赛题测试数据 2001~2007 数据√ 题面× 标程题解× 2008~2010 数据√ 题面√ 标程题解× 2011~2017 数据√ 题面√ 标程题解√ 其中除2008~2010外其他年份均按照年度、月度、金银铜白金组别整理...