NOIP2007年普及組題解
這道題,就是一道簡單的排序,在這裡,我用的是快速排序,根據題目的要求去進行排序即可。
直接暴力上程式碼~~~
#include<iostream>
#include<cstdlib>
#include<utility>
#include<cstdio>
using namespace std;
struct score{
int yu,shu,yin,hao;
}a[500];
int n,num[500];
void qsort(int l,int r)
{
if(l>=r)
return;
int k=rand()%(r-l+1)+l;
int t=num[k],s=a[k].yu,h=a[k].hao;
int i=l,j=r;
while(i<=j){
while(num[i]>t||(num[i]==t&&a[i].yu>s)||(num[i]==t&&a[i].yu==s&&a[i].hao<h))i++;
//先看總分的高低,再看語文分數的高低,如果還是相同的話,就看誰的學號在前面
while(num[j]<t||(num[j]==t&&a[j].yu<s)||(num[j]==t&&a[j].yu==s&&a[j].hao>h))j--;
//這裡也是一樣的
if(i<=j){
swap(a[i],a[j]);
swap(num[i],num[j]);
i++;
j--;
}
}
qsort(l,j);
qsort(i,r);
}
int main()
{
freopen("scholar.in","r",stdin);
freopen("scholar.out","w",stdout);
cin>>n;
for(int i=1;i<=n;++i){
cin >>a[i].yu>>a[i].shu>>a[i].yin;
num[i]=a[i].yu+a[i].shu+a[i].yin;
a[i].hao=i;//第幾個輸入的,學號就是幾
}
srand(1000000);
qsort(1,n);
for(int i=1;i<=5;++i)
cout<<a[i].hao<<" "<<num[i]<<endl;
return 0;
}
這是第二題:https://www.luogu.org/problemnew/show/P1094
這道題,首先,我們先將所有的紀念品的價值從高到低排一下序。然後使用貪心的做法,考慮當前沒有分組的最大價值的紀念品能否與當前最小的紀念品配對(二者的價值和不大於規定的額度)。如果不行,那麼這個大的單獨一組,如果可以,那麼這個最大的和最小的一組。
具體實現程式碼裡的註釋會有的~~~
#include<iostream>
#include<cstdlib>
#include<utility>
#include<cstdio>
using namespace std;
int w,n,a[30010];
int le,ri,ans=0;
void qsort(int l,int r)
{
if(l>=r)
return;
int t=a[rand()%(r-l+1)+l];
int i=l,j=r;
while(i<=j){
while(a[i]<t)i++;
while(a[j]>t)j--;
if(i<=j){
swap(a[i],a[j]);
i++;
j--;
}
}
qsort(l,j);
qsort(i,r);
}
void findans()
{
le=1,ri=n;
while(le<=ri)
{
if(a[le]+a[ri]<=w){//le是當前沒有分組的最大價值,ri是最小值
le++;
ri--;
ans++;
}
else{
ri--;
ans++;
}
}
}
int main()
{
freopan("group.in","r",stdin);
freopan("group.out","w",stdout);
cin>>w>>n;
for(int i=1;i<=n;++i)
cin>>a[i];
srand(1000000);
qsort(1,n);//從大到小排序
findans();
cout<<ans<<endl;
return 0;
}
#include<iostream>
#include<cstdio>
using namespace std;
int f[300100];
int main()
{
freopen("escape.in","r",stdin);
freopen("escape.out","w",stdout);
int m,s,t;
cin>>m>>s>>t;
//這裡是閃爍法術的情況
for(int i=1;i<=t;i++){
if(m>=10){
f[i]=f[i-1]+60;
m-=10;//如果能用,就用
}
else{
f[i]=f[i-1];
m+=4;//否則就在原地休息
}
}
//這裡是跑步的情況
for(int i=1;i<=t;i++){
f[i]=max(f[i],f[i-1]+17);//dp[i]為使用法術和跑步的最大值(最優)
if(f[i]>=s){
cout<<"Yes"<<endl<<i<<endl;//如果超過了距離s,就成功了,輸出Yes
return 0;
}
}
cout<<"No"<<endl<<f[t]<<endl;//沒成功,輸出No就好了~~~
return 0;
}
這個是第四題:https://www.luogu.org/problemnew/show/P1096
這道題,有點簡單了吧。。。就是一道普普通通的漢諾塔問題,乘了個二,然後再用高精度實現不就好了嗎?
直接暴力上程式碼~~~
#include<iostream>
#include<cstdio>
using namespace std;
int l,n;
int a[201],b[201];
void multiply()
{
int t=0;
for(int i=200;i>=1;i--){
l=b[i]*2+t;
b[i]=l%10;
t=l/10;
}
}//高精度乘法
void add()
{
int t=0;
for(int j=200;j>=1;j--){
l=a[j]+b[j]+t;
a[j]=l%10;
t=l/10;
}
}//高精度加法
int main()
{
freopen("hanoi.in","r",stdin);
freopen("hanoi.out","w",stdout);
cin>>n;
b[200]=1;
for(int i=1;i<=n;i++){
multiply();
add();
}
int k=1;
while(a[k]==0&&k<200)
k++;
for(int i=k;i<=200;i++)
cout<<a[i];
return 0;
}
相關推薦
NOIP2007年普及組題解
這道題,就是一道簡單的排序,在這裡,我用的是快速排序,根據題目的要求去進行排序即可。 直接暴力上程式碼~~~ #include<iostream> #include<cstdlib> #include<utility&g
NOIP2003年普及組題解
這是第一題:https://www.luogu.org/problemnew/show/P1042 首先,在做題之前要注意兩個地方: ‘E’不一定出現在文字的末尾,也不一定出現在某行的末尾 比賽必須要領先2個球才能獲勝,11:10的比分是不存在的 好了
NOIP2018普及組題解
雖然已經是TG選手了,但是作為一個初中生還是要做做PJ噠>_<. T1: 題目:luogu5015. 題目大意:將輸入的字元中的小寫字母、大寫字母和數字的總數量輸出. 水題,用getchar水過就可以了. 程式碼如下: #include<
[NOIP] 2018 普及組題解
目錄 一、題解 1、T1(title) 2、T2(fight) 3、T3(bus) 4、T4(tree) 二、總結 三、程式碼 1、T1(title) 2、T2(fight) 3、T3(bus) 4、T4(tree) 一
圖書管理員【2017年普及組第二題】
圖書管理員圖書管理員圖書管理員 題目描述 圖書館中每本書都有一個圖書編碼,可以用於快速檢索圖書,這個圖書編碼是一個正整數。 每位借書的讀者手中有一個需求碼,這個需求碼也是一個正整數。如果一本書的圖書編碼
普及組題解
–CSDN第一次創作 標題統計 簽到題,唯一需要注意的就是正向判斷 (作者唯一AC的一道題¥_¥) #include<cstdio> #include<cstring> int main() {
NOIP2013普及組 題解
T1 計數問題 題目描述 試計算在區間 1 到 n 的所有整數中,數字 x(0 ≤ x ≤ 9)共出現了多少次?例如,在 1 到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,數字 1 出現了 4 次。 輸入輸出格式 輸入格式:輸入檔名為 count
NOIP普及組題解(能有民間資料的三題)
普及組題解pascal版本(能測民間資料的三題) 1.成績(score.cpp/c/pas) 【問題描述】 牛牛最近學習了 C++入門課程,這門課程的總成績計算方法是: 總成績=作業成績×20%+小測
【用腳趾頭解決NOIP】(2)NOIP2009~NOIP2015年普及組完善程式
文章索引: 這一篇部落格,算是我的作業吧。 根據難度與時間,我從完善程式的第一題開始,從NOIP2009到NOIP2015年,逐題寫出思考思想。 NOIP2009(完善程式第一題):最大連續欄位和 題意描述: 給出一個數列(元素個數不多於100),數列元素均為負整數、正
【NOIP2016 普及組題解分析總結】
莫名的呵呵,普及組考完了,就這麼呵呵地考完了。。。心態放平靜,肯定有人考的比你好,剛剛到洛谷去測了測點選開啟連結(民間資料)慘淡的270 。。。。。啊啊啊啊啊shit來 開(xin) 心(hui)
[noip2007普及組]守望者的逃離-題解
描述 惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者 在與尤迪安的交鋒中遭遇了圍殺,被困在一個荒蕪的大島上。為了殺死守望者,尤迪安開始對這 個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為 17m/s,以這
codevs 1014 裝箱問題 2001年NOIP全國聯賽普及組
bold 位數組 時有 n) 當前 一位數 數組 是否 一位 題目描述 Description 有一個箱子容量為V(正整數,0<=V<=20000),同時有n個物品(0<n<=30),每個物品有一個體積(正整數)。 要求n個物品中,任取若幹個裝入箱內,使箱子的剩
NOIP2007 提高組 題解
com 想是 設有 最長路徑 區間 space 輸出 als ons 2007 提高組題解 第一題 一開始還想是不是要用哈希表儲存呢,但仔細想了一會兒,那個數據量20W 用個快排序,時間是能過的。所以這道題用個STL的快排,再一個循環統計個數就OK了。但最後交上去評測時
2017年8月14日套題記錄 | 普及組
現在 增強 問題 相同 要求 使用 計劃 今天 size 寫在前面 今天登洛谷發現離Noip剩下88天了??(雖然看起有點久),然後覺得似乎水了一個暑假什麽也沒做(雖然學了點數據結構和一些奇奇Gaygay的東西),於是打開題庫發現去年Long Happy的集訓套題我似乎沒
守望者的逃離(NOIP2007 普及組第三題)
跑步 ber 一個 初始 是否 最短時間 noip 移動 整數 描述 惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在一個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沈下去。到那時
NOIP2017-普及組復賽第2題 題解
需要 們的 class space desc 其中 超過 main out Description 圖書館中每本書都有一個圖書編碼,可以用於快速檢索圖書,這個圖書編碼是一個正整數。 每位借書的讀者手中有一個需求碼,這個需求碼也是一個正整數。如果一本書的圖書編碼恰好以
題解:子矩陣(NOIP2014普及組T4)
+= out bsp tdi 又是 style 預處理 sizeof 表示 又是dp 暴力枚舉會T 考慮先固定一個變量,比如先枚舉行 然後預處理每行之間的絕對值,每列之間的絕對值 然後dp進行轉移 註意記錄選擇的行數 轉移記得加上新選的列的行之間的絕對值,即w[
題解:車站分級(2013普及組)
這道題可以暴力可以拓撲排序 甚至還可以差分約束???? 原諒我一開始沒看出來可以差分約束 這是暴力做法 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using nam
【海亮集訓&&題解】普及組noip2018賽前練習題解
專輯:海亮集訓&&題解 一、小X與位運算 題目描述 自從上次小X 搞定了完美數之後,他最近在研究一項和計算機密切相關的黑科技。要知道在計算機的內部,資料都是以二進位制的形式來進行儲存的,而它使用的計算方法也和我們平時的加減乘除四則運算 有所
洛谷 題解 P5015 【標題統計】 NOIP2018 普及組 T1
stdio.h 理解 iso include %d num || code tdi 沒有人用 scanf("%c", &ch) != EOF 嗎? scanf 和 EOF 會傷心的。 思路:逐個讀入字符,遇到EOF中止,對於每個讀入的字符進行判斷