codeforces.com
1.460A 买袜子
题意:败家南妮
个人代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int day=0,i=1,mm=m;
while(n--){
day++;
if(day==1) n++;
else{
if(day-mm>0){
n++;
i++;
mm=m*i;
}
}
}
printf("%d\n",day-1);
return 0;
}
注意细节,按步模拟
2.677A 我和我的螃蟹朋友
题意:蹲下就看不见的世界,螃蟹无敌
个人代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,h;
scanf("%d%d",&n,&h);
int t,sum=n;
for(int i=0;i<n;i++){
scanf("%d",&t);
if(t>h) sum++;
}
printf("%d\n",sum);
return 0;
}
3.141A 字符串排序
题意:让string也sort起来
个人代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string a,b,c;
cin>>a>>b>>c;
a+=b;
sort(a.begin(),a.end());
sort(c.begin(),c.end());
if(a.compare(c)==0) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
//cout<<a<<b<<c<<endl;
return 0;
}
4.500A 钻洞真提莫好玩
题意:单向传送门
个人代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int n,t;
int a[1000+5];
scanf("%d%d",&n,&t);
for(int i=1;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<n;i+=a[i]){
if(i==t) break;
else if(i>t){
printf("NO\n");
return 0;
}
}
printf("YES\n");
return 0;
}
超时,
网上抄的:
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int N=3e4+10;
vector<int>a[N];
bool vis[N];
int x;
void dfs(int x)
{
vis[x]=1;//bool可以=1
for(int i=a[x].size()-1;~i;i--){//i>=0
int y=a[x][i];
if(!vis[y])
dfs(y);
}
}
int main()
{
int n,t;
while(~scanf("%d%d",&n,&t)){
for(int i=1;i<n;i++){
scanf("%d",&x);
a[i].push_back(i+x);
}
dfs(1);
puts(vis[t]?"YES":"NO");
}
return 0;
}
还可以用于更多更复杂的情况,mark一下
5.379A 酒瓶换酒
题意:经典数学题
个人代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b)){
int sum=a;
while(a>=b){
sum+=a/b;
a=a%b+a/b;
}
printf("%d\n",sum);
}
return 0;
}
6.510A 蛇皮阵
题意:画个蛇
个人代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i%2==0) printf("#");
else if(i%4==1&&j==m-1) printf("#");
else if(i%4==3&&j==0) printf("#");
else printf(".");
}
printf("\n");
}
}
return 0;
}
7.339B 这个人可能还想跑两圈
题意:跑步吧,应该
个人代码:
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e5+10;
int main()
{
int n,m;
int a[N];
long long sum=0;
while(~scanf("%d%d",&n,&m)){
for(int i=0;i<m;i++){
scanf("%d",&a[i]);
if(i==0) sum=a[0]-1;
else{
if(a[i]>=a[i-1])
sum+=(a[i]-a[i-1]);
else
sum+=(n-a[i-1]+a[i]);
}
}
printf("%I64d\n",sum);//不要lld,要不就cout
}
return 0;
}
8.82A 神经病啊,喝可乐分裂了
题意:谢耳朵不要钱了,不买几只吗
个人代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
long long n;
while(~scanf("%I64d",&n)){
int w=5;
while(n>0){
n-=w;
w*=2;
}
w/=2;
n+=w;
double k=(double)n/w*1.0;
if(k>0&&k<=0.2) printf("Sheldon\n");
else if(k>0.2&&k<=0.4) printf("Leonard\n");
else if(k>0.4&&k<=0.6) printf("Penny\n");
else if(k>0.6&&k<=0.8) printf("Rajesh\n");
else printf("Howard\n");
}
return 0;
}
答案错误,本地输入3与网上的答案不一样,为什么?操作系统不同的原因,不太明白
网上抄的:
#include <iostream>
using namespace std;
int cnt;
int sum(int cnt){
int m=5,ma=1;
for(int i=1;i<=cnt;i++)
ma=ma*2, m=m+5*ma;
return m;
}
int xn(int cnt){
int y=1;
for(int i=1;i<=cnt;++i)
y=y*2;
return y;
}
int main()
{
int n;
cin>>n;
int x=5,y=1,res=0;
if(n<6) res=n;
else{
cnt=0;
while(n>sum(cnt)) cnt++;
cnt--;
n-=sum(cnt);
res=(n-1)/xn(cnt+1)+1;
}
if(res==1) cout<<"Sheldon"<<endl;
if(res==2) cout<<"Leonard"<<endl;
if(res==3) cout<<"Penny"<<endl;
if(res==4) cout<<"Rajesh"<<endl;
if(res==5) cout<<"Howard"<<endl;
return 0;
}
有点烦,不是自己写的看起来怪怪的,下次想个好点的
9.230A 杀龙不如杀鸡
题意:来一手结构体排序,就很捞
个人代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1e3+10;
struct dragon
{
int x;
int y;
}dra[N];
bool cmp(dragon a,dragon b)
{
if(a.x!=b.x) return a.x<b.x;//返回预期结果为真的情况
else return a.y>b.y;
}
int main()
{
int s,n;
while(~scanf("%d%d",&s,&n)){
for(int i=0;i<n;i++)
scanf("%d%d",&dra[i].x,&dra[i].y);
sort(dra,dra+n,cmp);
int flag=0;
for(int i=0;i<n;i++){
if(s>dra[i].x) s+=dra[i].y;
else {
flag=1;
break;
}
}
puts(flag?"NO":"YES");
}
return 0;
}
10.492B 路灯不是等分排布的吗。。。
题意:这条路要多亮的电灯泡才能拯救城规的脑子
个人代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1e3+10;
int a[N];
int main()
{
int n,l;
while(~scanf("%d%d",&n,&l)){
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,a+n);
int maxn=a[0]*2;
for(int i=1;i<n;i++)
maxn=max(maxn,(a[i]-a[i-1]));
maxn=max(maxn,(l-a[n-1])*2);
double d=(double)maxn/2;
printf("%.10lf",d);
}
return 0;
}
11.705A 梦中梦中梦
题意:庄生晓梦迷蝴蝶
个人代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1e3+10;
int a[N];
void put1(const char *s)
{
while(*s)
putchar(*s++);
}
int main()
{
int n;
while(~scanf("%d",&n)){
int m=n;
put1("I hate ");
while(n--){
if(n==0) put1("it\n");
else if((m-n)%2==1) put1("that I love ");
else put1("that I hate ");
}
}
return 0;
}
puts自动换行,以上是不换行的类似写法,注意putc是其他的东西,别记错了
12.455A 来啊,以钱赚钱
题意:付出与回报的利益最大化
个人代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=1e5;
int a[N];
int main()
{
int n;
while(~scanf("%d",&n)){
memset(a,0,sizeof(a));
int sum=0,x;
for(int i=0;i<n;i++){
scanf("%d",&x); a[x]++;
}
for(int i=1;i<N;i++){
if(i==1){
if(a[1]>=a[2]*2){
sum+=a[1]; a[2]=0; i++;
}
}
else if(a[i]*i>=a[i-1]*(i-1)+a[i+1]*(i+1)){
sum+=a[i]*i; a[i+1]=0; i++;
}
else{
sum+=a[i-1]*(i-1)+a[i+1]*(i+1);
a[i+1]=0; i++;
}
}
printf("%d\n",sum);
}
return 0;
}
错误,完全不对,没想出好方法,准备抄了٩(๑`н´๑)۶