披着数论外皮的水(nan)题(si),狗狗进笼子,进错笼子的狗狗的期望:n-1,打表许能找出规律来???,,,,
#include <bits/stdc++.h>
using namespace std;
int main(){
int t,n,cas=1;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
double ans=n-1.00;
printf("Case #%d: %.10lf\n",cas++,ans);
}
}
大佬:不可做题。
蒟蒻瑟瑟发抖(等待补题吧,但愿不是有生之年系列),,,
思维题,x>y 时候,羽毛球可以一直打下去,不花钱就能全赢,其余情况,先输一局赚钱,在不停赢,直到没钱,再输
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;cin>>t;
for(int cnt=1;cnt<=t;cnt++){
int x,y,k;
cin>>x>>y>>k;
if(x>y){
printf("Case #%d: %d\n",cnt,k);continue;
}
int p=11*x,pp=11*y-9*x;
int xx=0,ans=0;
for(int i=1;i<=k;i++){
if(xx>=pp){
xx-=pp;ans++;
}else xx+=p;
}
printf("Case #%d: %d\n",cnt,ans);
}
return 0;
}
等待补题,,,,,,
真·签到题,记得每个都是1.1倍,加一舍掉小数
#include <bits/stdc++.h>
using namespace std;
int a[1005];
int main(){
int t,n,cas=1;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int ans=0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
ans+=a[i]+a[i]/10;
if(a[i]%10)ans++;
}
printf("Case #%d: %d\n",cas++,ans);
}
}
等待补题,,,,,,,,
贪(jiu)心(shi)误(wo)我(cai),结果ans = dp[n][k];
#include<cstring>
#include<iostream>
#include <algorithm>
#define ll long long
using namespace std;
const int maxn=2e3+5;
struct node{
int l,r,len;
}p[maxn];
bool cmp(node a,node b){
return a.l<b.l;
}
int dp[maxn][maxn];//dp[i][j]表示,从j个集合中可取得1~i编号的邮票的最大值
int main(){
int T;scanf("%d",&T);
for(int t=1;t<=T;t++)
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
memset(dp,0,sizeof dp);
for(int i=0;i<m;i++){
scanf("%d%d",&p[i].l,&p[i].r);
p[i].len=p[i].r-p[i].l+1;
}
sort(p,p+m,cmp);
int pos=0,num=0;
for(int i=0;i<n;i++){
//以i+1左端点的集合中取最大值
while(pos<m&&p[pos].l==i+1){
num=max(num,p[pos].len) ;
pos++;
}
for(int j=0;j<=k;j++){
dp[i][j+1]=max(dp[i][j],dp[i][j+1]);
dp[i+1][j]=max(dp[i][j],dp[i+1][j]);
dp[i+num][j+1]=max(dp[i+num][j+1],dp[i][j]+num);
}
if(num)num--;
}
printf("Case #%d: %d\n",t,dp[n][k]);
}
}
等待补题,,,,,,
等待补题,,,,,,
补题,,SPFA加差分约束,还在看最短路专题
#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#define endl '\n'
#define sc(x) scanf("%lld",&x)
using namespace std;
const int inf=0xc0c0c0c0;
const int size=2005;
struct Edge{
int u,v,w;
Edge(int u=0,int v=0,int w=0):u(u),v(v),w(w){}
};
vector<Edge> edge;
vector<int> No[2005];
int vis[2005];
int dis[2005];
int cnt[2005];
void init(int n)
{
fill(dis,dis+n+1,inf);
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
for(int i=0;i<=n;i++) No[i].clear();
edge.clear();
}
void addedge(int u,int v,int w)
{
edge.push_back(Edge(u,v,w));
No[u].push_back(edge.size()-1);
}
bool spfa(int s,int n)
{
dis[s]=0;
queue<int> Q;
Q.push(s);
while(!Q.empty())
{
int k=Q.front();
Q.pop();
vis[k]=0;
for(int i=0;i<No[k].size();i++)
{
int id=No[k][i];
if(dis[edge[id].v]<dis[k]+edge[id].w)
{
dis[edge[id].v]=dis[k]+edge[id].w;
if(!vis[edge[id].v])
{
Q.push(edge[id].v);vis[edge[id].v]=1;
if(++cnt[edge[id].v]>n) return false;
}
}
}
}
return true;
}
int main(){
int t,cas=1;
cin>>t;
while(t--){
int n,m,x;
cin>>n>>m>>x;
init(n+1);
for(int i=1;i<=n;i++){
addedge(i-1,i,1);
}
for(int i=0;i<m;i++){
int a,b,c,d,pf=0;
cin>>a>>b>>c>>d;
if(a!=b||c!=d)pf=1;
addedge(c,b,pf-x);
addedge(a,d,x+pf);
}
printf("Case #%d:",cas++);
if(!spfa(0,n+1)||dis[n]==inf){
printf(" IMPOSSIBLE\n");continue;
}
for(int i=2;i<=n;i++){
printf(" %d",dis[i]-dis[i-1]);
}
printf("\n");
}
}
十一,Knightmare
马走日,无限大的棋盘,跳过N次后,可能的位置数量,打表找规律,我为啥要用dfs,呜呜呜,还有刚好卡掉long long,ull才行
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
int a[10];
int main(){
int t;scanf("%d",&t);
a[0]=1;
a[1]=9;
a[2]=41;
a[3]=109;
a[4]=205;
a[5]=325;
a[6]=473;
for(int cnt=1;cnt<=t;cnt++){
ll n;cin>>n;
if(n<=6)printf("Case #%d: %d\n",cnt,a[n]);
else {
ull ans=473;
ll t=n-6;
ans=ans+148*t;
ll temp=(t*(t+1))/2;
ans=ans+28*temp;
printf("Case #%d: ",cnt);
cout<<ans<<endl;
}
}
}
比赛好像一道完整的都没搞完,抱紧菜菜的自己,,,,,